讓我發佈一個簡單的例子:什麼線程在`await`關鍵字後面運行代碼?
private void MyMethod()
{
Task task = MyAsyncMethod();
task.Wait();
}
private async Task MyAsyncMethod()
{
//Code before await
await MyOtherAsyncMethod();
//Code after await
}
比方說,我在運行單線程應用程序般的控制檯APP-上面的代碼。我很難理解代碼//Code after await
將如何運行。
我明白,當我打的await
關鍵字MyAsyncMethod()
控制追溯到MyMethod()
,但後來我鎖定的線程與task.Wait()
。如果線程被鎖定,如果線程被鎖定,如何運行//Code after await
?
是否創建了一個新線程來運行//Code after await
?或者主線程神奇地走出task.Wait()
運行//Code after await
?
我不知道這應該如何工作?
這一切都假設當前的同步上下文永遠不會被用戶代碼改變;你可以在任何你想要的任何應用程序中設置它,並給它任何你想要的行爲。 – Servy
我不知道.NET控制檯應用程序背後的線程池。意識到現在可以回答所有問題。謝謝。 – AxiomaticNexus
@YasmaniLlanes如果您不瞭解「ThreadPool」,我建議您閱讀它。它應該是這樣學習ThreadPool然後TPL然後異步/等待。 –