避免DbContext同時在多個線程調用

下面這個微軟官方文檔闡述了,應該避免在多個線程上同時操作同一個DbContext:

Avoiding DbContext threading issues

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章