2017-04-22 100 views
-2

我經常發現某些API中的某些方法不是線程安全的。例如,讓我們考慮一下EF上下文。這裏是我可以從asp.net核心教程引用的警告:EF上下文不是線程安全的,爲什麼不通過設計使線程安全?

EF上下文不是線程安全的:不要嘗試並行執行多個操作。當您撥打任何async EF方法時,請始終使用await關鍵字。

問題

一般而言,方法的線程安全性高由設計決定,或者是發現後面的錯誤呢?對於上面的EF上下文,爲什麼不讓它線程安全?

+1

因爲做起來非常複雜?誰知道,無論如何,這隻能用意見來回答。 – DavidG

+1

我認爲這個問題必須寫給EF的作者。我的意見:因爲線程安全有成本。 – Ingaz

+1

當然,它不是線程安全的,您可以創建一個DbContext,以跟蹤對模型所做的更改。如果您在多個線程中進行更改,您如何建議它知道要保存什麼以及何時(例如,在多線程中執行更新時)? DbContext基本上被扔掉了。 – Luke

回答

1

通常,使可變數據結構線程安全非常困難,並且對單線程用例有負面影響。

通常需要不同的(更復雜的)api來完成這些更改(即DictionaryConcurrentDictionary)。

+1

這並不真正回答這個問題(無論如何都不能真正回答),因爲它現在有upvotes,問題不能自動刪除。請不要回答這樣的事情。 – DavidG

+0

@DavidG聽起來很合理。但這個問題並不糟糕,而且imho值得回答(不是我的)。 – TcKs

+0

但是這個問題對Stack Overflow來說顯然是不好的,這就是爲什麼它被封閉並且有3個downvotes。回答這個問題只會鼓勵用戶發表主題問題,並浪費你的時間。你不願意回答質量好的問題嗎? – DavidG