我有以下内容:
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();
}
}
我遇到一个问题,尝试运行此命令时看到以下内容:
EntityFramework.dll中发生类型为System.InvalidOperationException的异常,但未在用户代码中处理。创建模型时无法使用上下文。如果在OnModelCreating方法内部使用上下文,或者多个线程同时访问同一上下文实例,则可能引发此异常。注意,不能保证DbContext和相关类的实例成员是线程安全的。
我究竟做错了什么?我认为通过dbContext
为每个线程使用新的线程,我会没事的。
我是个白痴。这是因为我_numberService
在async方法之外定义了,所以每个异步用法都覆盖了其他上下文。h
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句