Dot-Net

在 C# .NET 中,非同步操作是否一定會創建阻塞的執行緒?

  • May 13, 2015

這是關於MSDN here上描述的 C# .NET 中的非同步模式的更多一般問題。

當需要呼叫長時間執行的同步操作(例如 - WCF、DB 查詢、IO 等),並且我不希望執行緒阻塞(例如 - GUI 執行緒)時,這是否意味著必須存在另一個執行緒阻止的地方?

進行同步呼叫非同步是否一定需要某個執行緒阻塞?

所以,如果我進行 10 個長時間執行的非同步呼叫(實際上是 10 個同步呼叫),是否必須有 10 個執行緒在等待?還是有防止10個執行緒被阻塞的機制?

在 WCF 中,您可以為 WCF 呼叫創建 Begin 和 End 方法以使其非同步。這是否意味著當我呼叫此非同步方法時,客戶端或伺服器上的某處有一個執行緒在等待我?

我已經閱讀了幾篇關於實現非同步的不同方法的文章,但這些文章並沒有解釋幕後所做的事情。

更新

我讓我的問題更具體,因為我對 .NET 更感興趣。MSDN描述的非同步模式。

更新 2

我修改了這個問題,使其更加具體地使同步呼叫非同步。

.NETFramework 中,有很多方法可以實現非同步操作:使用執行緒、執行緒池、BeginXxx 和 EndXxx 方法、基於事件的 APM 或基於任務的 APM。

每個非同步模式都有自己的內部實現,所有這些非同步程式模型都在這篇部落格**文章**中進行了解釋,包括傳統的 BeginXxx 和 EndXxx 非同步模式。

以下是所有非同步模式的摘要,以供快速參考: 非同步摘要:

此外,Jeffrey Richter 還在 MSDN Magazine 中很好地解釋了CLR 非同步程式模型

引用自:https://stackoverflow.com/questions/9582165