2016-10-22 64 views
1

內委託的BeginInvoke我有這樣如何調用的DbContext

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

的問題是一個代碼,餵食給MyDelegate的函數使用傳遞給它的分貝的DbContext,由於委託運行異步時,數據庫上下文在函數試圖訪問數據庫時被關閉。有人可以幫助解決這個問題嗎?謝謝你太多了!

回答

1

上下文是不是線程安全的,你將有問題的,如果你嘗試使用它
(不幸的是,有時你不會注意到什麼毛病......)

總之,最好的方法是創建一個新的你的方法裏面的上下文將解決你的原始問題

+0

謝謝!是的,我害怕這一點。我知道我可以在方法內部創建新的上下文,但最終我會爲並行線程實例化一堆上下文,而這正是我試圖避免的。所以它看起來像是使用了一堆上下文(每個線程1個),或者,在這種情況下不使用委託。這是對的嗎? – Yogi

+0

@Yogi上下文實例化非常便宜,不要害怕每個線程創建一個 –

相關問題