避免DbContext同時在多個執行緒呼叫

PowerCoder發表於2024-05-16

下面這個微軟官方文件闡述了,應該避免在多個執行緒上同時操作同一個DbContext:

Avoiding DbContext threading issues

其中有說到,在使用DbContext的程式碼中,所有的非同步函式應該立即被await,否則會有極大機率丟擲InvalidOperationException。這是因為一個DbContext例項不能被多個執行緒同時操作,在單一時間點上只能被一個執行緒操作。而非同步函式中操作DbContext的程式碼,可能在另外一個執行緒上,如果不await非同步函式,那麼就有可能會出現兩個執行緒(甚至多個執行緒)同時操作DbContext的情況。如果使用await等待了非同步函式,雖然有可能呼叫await非同步函式的執行緒和執行await非同步函式之後程式碼的執行緒不是同一個執行緒,但是在單一時間點,始終還是隻有一個執行緒在操作DbContext例項,不會出現本文說的多個執行緒在單一時間點,操作同一個DbContext例項的情況。

相關文章