Как вызвать делегат beginInvoke в DBContext

у меня такой код

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

Проблема в том, что функция, которая передается MyDelegate, использует переданный ей db dbcontext, и, поскольку делегат запускается асинхронно, контекст db был закрыт, пока функция пытается получить доступ к базе данных. Может ли кто-нибудь помочь решить эту проблему? Большое спасибо!


person Yogi    schedule 22.10.2016    source источник


Ответы (1)


Контекст не является потокобезопасным, у вас возникнут проблемы, если вы попытаетесь его использовать
(к сожалению, иногда вы не заметите ничего плохого...)

В любом случае, лучший подход - создать новый контекст внутри вашего метода, который решит вашу первоначальную проблему.

person George Vovos    schedule 03.11.2016
comment
Благодарю вас! да я боялся этого. Я знаю, что могу создать новый контекст внутри метода, но тогда я бы создал кучу контекста для параллельных потоков, чего я пытался избежать. Таким образом, похоже, что вариант либо использует кучу контекста (по 1 на поток), либо не использует делегат для этого случая. Это примерно так? - person Yogi; 21.12.2016
comment
Создание контекста @Yogi очень дешево, не бойтесь создавать по одному для каждого потока. - person George Vovos; 21.12.2016