我正在编写一个带有后台服务的.Net核心应用程序,该服务向API发出请求,然后返回值。后台服务每X秒执行一次。然后我将这些值写入SQLite数据库。但是,我收到错误
“在此前提下开始第二次操作 操作完成。“
尝试将值写入数据库时。后台服务和我的存储库通过DI注入。
以下是生成错误的代码: Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<EfDbContext>(options =>
options.UseSqlite(Configuration.GetSection("EntityDB:ConnectionString").Value)
);
services.AddScoped<IRepository, EfDbRepository>();
if (bool.Parse(Configuration.GetSection("BackgroundService:Start").Value))
{
services.Configure<BackgroundServiceOptions>(Configuration.GetSection("BackgroundService"));
services.AddSingleton<DataProvider>();
services.AddSingleton<IHostedService, RefreshService>();
}
services.AddMvc();
}
DataProvider.cs(后台服务):
public async Task FetchData(CancellationToken cancellationToken)
{
var tasks = _services.Select(s => GetDataForService(s, cancellationToken));
await Task.WhenAll(tasks);
}
private async Task GetDataForService(IService service, CancellationToken cancellationToken)
{
await service.GetData(cancellationToken);
var value = service.OutputValue;
value.SensorID = service.Sensor.ID;
_repository.InsertSensorValue(new SensorValue[] { value }, service.Sensor.ID);
}
存储库:
public void InsertSensorValue(SensorValue[] sensorValues, string sensorId)
{
foreach (var sensorValue in sensorValues)
{
_context.SensorValues.Add(sensorValue);
}
_context.SaveChanges();
}
我认为我的错误在于这些值同时写入数据库。但我不太确定如何解决这个问题,因为我仍然是异步编程的新手。有人可以帮帮我吗?