【发布时间】:2016-10-23 00:18:56
【问题描述】:
假设我有以下sn-p:
using (var db = new dbContext()){
var user = db.Users.Find(3);
user.Name = "newName";
var viewModel = GetViewModelAndDoStuffToUser(user);
db.SaveChanges();
return viewmodel;
}
现在我正在尝试通过利用 async/await 来大规模提高这个 sn-p 的性能,但我读到 dbContext 不是“线程安全的”。所以我有点困惑:
- 我是否可以在与 dbContext 相关的调用中使用
async/await - 我是否应该使用
.ConfigureAwait(false)。我读过这告诉我们不要重新输入 MVC 和 WebApi 控制器所需的“.NET 上下文”——但这是为这些控制器提供服务的应用程序的服务层。我还读到使用它可以防止死锁。 - 无论是否 - 在更复杂的场景中 - 我可以通过使用
Task.WhenAll()来并行化使用dbContext的同一实例的调用
以下 sn-p 是否会是朝着正确方向迈出的可扩展、线程安全的一步?
using (var db = new dbContext()){
var user = await db.Users.FindAsync(3).ConfigureAwait(false);
user.Name = "newName";
var viewModel = await GetViewModelAndDoStuffToUserAsync(user).ConfigureAwait(false);
await db.SaveChangesAsync().ConfigureAwait(false);
return viewmodel;
}
【问题讨论】:
标签: c# .net multithreading entity-framework asynchronous