我有以下内容:
await Task.WhenAll(
Task.Run(() => HandleJob("one"),
Task.Run(() => HandleJob("two"),
Task.Run(() => HandleJob("three"));
HandleJob在哪里:
private async Task HandleJob(string param) {
using (var db = new DbContext()) {
_numberService = new NumberService(db);
_numberService.DoThis(param);
}
}
NumberService是这样的:
public class NumberService {
private readonly DbContext db;
private CommService _commService;
public NumberService(DbContext db) {
this.db = db;
_commService = new CommService(db);
}
public void DoThis(string param){
_commService.DoThat(param);
}
}
CommService就是这样:
public class CommService {
private readonly DbContext db;
public CommService(DbContext db) {
this.db = db;
}
public void DoThat(string param){
db.Things.Add(param);
db.SaveChanges();
}
}
我遇到了一个问题,当我尝试运行时会看到以下内容:
System.InvalidOperationException类型的异常 发生在EntityFramework.dll但未在用户代码中处理上下文 在创建模型时不能使用。这个例外可能是 如果在OnModelCreating方法中使用上下文或者是否使用了上下文 多个线程访问相同的上下文实例 同时。注意DbContext的实例成员和相关的 类不保证是线程安全的。
我做错了什么?我认为通过为每个线程使用新的dbContext
,我会没事的。
答案 0 :(得分:0)
_numberService
,因此每个异步使用都会覆盖其他的上下文。卫生署。