当与Task.WhenAll中的不同任务一起使用时,SaveChangesAsync死锁

时间:2018-03-30 16:17:04

标签: c# asp.net asynchronous async-await

我想将实体并行保存到数据库和xml日志文件中。

我的存储库中的

AddAsync方法看起来像这样(并且它工作正常):

protected async Task<int> AddAsync(T entity)
{    
    using (var context = new myDbContext())
    {
        context.Set<T>().Add(entity);
        return await context.SaveChangesAsync();
    }
}

将日志保存到xml文件的方法如下所示:

await _xmlDbHelper.Log(entity);

要并行运行它们我试图这样做:

List<Task<int>> taskArray = new List<Task<int>> {
    Task.Run(async () => await AddAsync(person)),
    Task.Run(async () => await _xmlDbHelper.Log(person))
};

await Task.WhenAll(taskArray);

List<Task<int>> taskArray = new List<Task<int>> {
    AddAsync(person),
    _xmlDbHelper.Log(person)
};

await Task.WhenAll(taskArray);

但是AddAsync并没有运行。它永远保持在WaitingForActivation状态。将AddAsync单独放入数组中并且从不调用_xmlDbHelper.Log具有相同的效果。

0 个答案:

没有答案