c# - 如何在 C# 中同步集合?
问题描述
我TransactionService
在 .net 核心 web api 应用程序中有一个简单的托管服务(称为)。我在填充列表时遇到问题TransactionService
在我的TransactionController
我使用以下方法来添加交易:
public IActionResult CreateTransaction(Transaction transaction)
{
// validate
var _transactionS= (TransactionService)_transactionService.Service;
_transactionS.Add(transaction);
return Ok();
}
在我的TransactionService
课堂上:
private List<Transaction> transactions = new List<Transaction>();
public void AddTransaction(Transaction transaction)
{
transactions.Add(transaction);
}
protected override Task FilterTransactions()
{
foreach(var item in transactions)
{
//Do some work
}
return Task.CompletedTask;
}
}
所以当我调用CreateTransaction
我的控制器时,这将调用AddTransaction
我的服务类中的方法。
该FilterTransaction
方法每 5 秒执行一次,检查列表中的每个元素并检查一些条件,唯一的问题是我的交易列表是空的。
如果我在其中添加断点,AddTransactionMethod
它将显示正确的计数,但我的 foreach 语句上的断点将显示计数 0。
这是Startup
注册服务的类代码
services.AddHostedService<TransactionService>();
services.AddSingleton<IHostedServiceAccessor<ITransactionService>, HostedServiceAccessor<ITransactionService>>();
和 TransactionService 设置:
public interface IHostedServiceAccessor<out T> where T : IHostedService
{
T Service { get; }
}
public class HostedServiceAccessor<T> : IHostedServiceAccessor<T> where T : IHostedService
{
public HostedServiceAccessor(IEnumerable<IHostedService> hostedServices)
{
Service = hostedServices.OfType<T>().FirstOrDefault();
}
public T Service { get; }
}
public interface ITransactionService: IHostedService
{
}
internal class TransactionService : TransactionServiceBase, ITransactionService
{
private List<Transaction> transactions = new List<Transaction>();
public TransactionService()
:base(TimeSpan.FromMilliseconds(5000))
{
}
public void AddTransaction(Transaction transaction)
{
transactions.Add(transaction);
}
protected override Task FilterTransactions()
{
foreach (var item in transactions)
{
//Do some work
}
return Task.CompletedTask;
}
}
该类TransactionServiceBase
继承自BackgroundService 并且是一个DLL。它有一个抽象的 FilterTransaction 方法和另一个密封的 ExecuteAsync()
解决方案
推荐阅读
- flutter - 在没有 setState Flutter 的情况下滚动时禁用 CustomScrollView 的滚动
- javascript - 如何计算点后面两位小数的数字
- javascript - 如何在 React App 中显示各种文件
- php - Laravel 应用程序在本地运行良好,但在实时服务器上显示“未定义变量 $header”
- sql - 从 SQL Server 表到 XML 的数据
- wordpress - 在结帐页面付款前移动 wocommerce 运输方式
- android - 如何约束相对布局以在屏幕上采用最大指定宽度
- python - 无法让 C# 服务器在同一网络上的不同计算机上与 Python 客户端很好地配合使用
- c# - .NET Core 发布的项目总是重定向到 Account/Login?ReturnUrl=%2
- ios - 插入新的 NSAttribuitedString 时,UITextView 插入符号跳转到末尾