Entity framework 如何在DBContext中调用委托beginInvoke

Entity framework 如何在DBContext中调用委托beginInvoke,entity-framework,asynchronous,delegates,dbcontext,Entity Framework,Asynchronous,Delegates,Dbcontext,我有这样的代码 using (SomeDBContext db = new SomeDBContext()) { foreach (var r in someColection) { MyDelegate.BeginInvoke(db, parm1, parm2, etc, null, null); } } 问题是,提供给MyDelegate的函数使用传递给它的db dbcontext,并且由于委托是异步运行的,因此在函数

我有这样的代码

 using (SomeDBContext db = new SomeDBContext())
 {
     foreach (var r in someColection) 
        {
           MyDelegate.BeginInvoke(db, parm1, parm2, etc, null, null);
        }
 }

问题是,提供给MyDelegate的函数使用传递给它的db dbcontext,并且由于委托是异步运行的,因此在函数尝试访问数据库时关闭了db上下文。有人能帮忙解决这个问题吗?非常感谢你

上下文不是线程安全的,如果您尝试使用它,您将遇到问题
(不幸的是,有时你不会注意到任何错误…)


无论如何,最好的方法是在方法中创建一个新的上下文,它将解决您原来的问题

谢谢!是的,我很害怕。我知道我可以在方法内部创建新的上下文,但是我最终会为并行线程实例化一组上下文,这是我试图避免的。因此,看起来该选项要么使用一组上下文(每个线程1个),要么在这种情况下不使用委托。是这样吗?@Yogi上下文实例化非常便宜,不要害怕为每个线程创建一个