【发布时间】:2019-06-14 21:57:21
【问题描述】:
我有一个方法,我想在其中执行 3 个异步方法。其中2个(Method1和Method3)使用dbContext查询数据。
await Task.WhenAll(Method1(dbContext), Method2(), Method3(dbContext)).ConfigureAwait(false);;
await seedSession.SaveChangesAsync().ConfigureAwait(false);
.ConfigureAwait(false); 出现错误
“在前一个异步操作完成之前,在此上下文上启动了第二个操作”
当没有.ConfigureAwait(false); 时 - 一切正常。
Method1 和 Method3 是否存在问题,它们使用相同的上下文同时进行查询?
Method1 只是更新 db 中的数据... Method2 - 更新 blob 中的数据,Method3 - 更新 azure 表中的数据并同步到 db... 所以 Method1 和 Method3 可以“访问” db
【问题讨论】:
-
您不能使用相同的上下文来并行运行查询。
-
@DavidG,是的,这是合乎逻辑的......但为什么它在
.ConfigureAwait(false)之外有效?对我来说,它可能是 50on50 会起作用 -
什么是
50on50? -
@ColinM 550
-
真的很重要为什么它显然没有
ConfigureAwait就不能发现同样的问题?在您期望方法共享将同时执行的情况下,您不恰当地共享单个上下文对象。你需要修复那个,不管它的“原因”是什么。
标签: c# .net multithreading asynchronous async-await