“在上一次操作完成之前,第二次操作开始于此上下文。”使用任务

时间:2018-01-17 16:16:25

标签: c# entity-framework asynchronous dependency-injection

我正在编写一个带有后台服务的.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();
}

我认为我的错误在于这些值同时写入数据库。但我不太确定如何解决这个问题,因为我仍然是异步编程的新手。有人可以帮帮我吗?

0 个答案:

没有答案