我很好奇異步等待線程內部結構。異步等待線程內部結構
每個人都表示異步在性能方面比較好,因爲它釋放了正在等待長時間異步調用響應的線程。 好吧,我明白了。
但讓我們來考慮這種情況。
我有一個異步方法在數據庫上執行異步操作。 數據庫的api暴露函數BeginQuery和事件QueryCompleted。 我用一個任務(使用TaskCompletionSource)包裝了它們。
我的問題是調用BeginQuery和觸發事件QueryCompleted之間的內幕。
我的意思是 - 是否需要培育某種工作人員來開展活動?在非常低的級別,它必須是一些同步循環,阻止來自db的線程讀取結果。
我想,任何異步調用都必須生成一個線程來實際處理響應(也許等待它在驅動程序代碼中的低級C++循環中)。
所以我們唯一的「收穫」就是當其他線程正在工作時,調用者線程可以被釋放。
調用異步方法是否總是創建一個新的工作線程?
有人可以證實我的理解?
我不認爲「每個人都表示異步在性能方面更好」。異步/等待可以使應用程序更具響應性,因爲它可以更輕鬆地使用用戶界面的任務和延續。 – Dirk
異步/等待是比線程更高層次的抽象。這些操作在SynchronizationContext上同步,並且引擎的實現可能會或可能不會創建額外的線程。見例如[這是所有關於SynchronizationContext](http://msdn.microsoft.com/en-us/magazine/gg598924.aspx)。 – GSerg