有了這個代碼:線程阻塞後等待
static void Main(string[] args)
{
Console.WriteLine("Main Thread Pre - " + GetNativeThreadId(System.Threading.Thread.CurrentThread));
Task.Run(() => AsyncMethod()).Wait();
Console.WriteLine("Main Thread Post - " + GetNativeThreadId(System.Threading.Thread.CurrentThread));
Console.ReadKey();
}
static async Task AsyncMethod()
{
Console.WriteLine("AsyncMethod Thread Pre - " + GetNativeThreadId(System.Threading.Thread.CurrentThread));
await Task.Delay(4000).ConfigureAwait(false);
Console.WriteLine("AsyncMethod Thread Post - " + GetNativeThreadId(System.Threading.Thread.CurrentThread));
}
的輸出是:
Main Thread Pre - 8652
AsyncMethod Thread Pre - 4764
AsyncMethod Thread Post - 1768
Main Thread Post - 8652
使用併發可視化後可以看到4個第二延遲期間,螺紋4764是停留在同步。它最終在關機時被主線程解除封鎖。
一旦碰到await
,不應將線程4764返回到ThreadPool
? (這是說我不知道在Concurrency Visualizer裏面看起來會是什麼樣子)
您可以演示任何類型的問題*沒有*訴諸併發可視化器? –
不,我不能。我做了這個練習,看看在併發可視化器中看起來像是什麼樣的等待線程,並且一旦它等待,就很驚訝地看到它在同步類別中。要麼我對異步的理解不正確,要麼我誤解了併發可視化工具告訴我的內容。我想我只是在尋找確認線程4764實際上應該返回到ThreadPool的時候,它會等待。 – Cuthbert
任務線程被延遲,但延遲調用仍然在內部運行一個計時器,因此正在工作。延遲不是調度延遲。 –