在試圖理解異步/等待我做了一個示例WPF應用程序有一個按鈕。當點擊它會做一些「工作」:異步等待在預期的線程上不執行
private async void goButtonClicked(object sender, EventArgs e)
{
WhatThreadAmI();
var task = populateRawData().ConfigureAwait(false);
WhatThreadAmI();
BusyIndicator.IsBusy = true;
await task;
WhatThreadAmI(); //this isnt on the main thread - why??
BusyIndicator.IsBusy = false;
Console.WriteLine("fin");
}
的「WhatThreadAmI」僅僅是當前比較線程到UI線程我節省初始化。
public bool IsMainThread => uiThread == Thread.CurrentThread;
我預計這個輸出是真 - 真 - 真,隨着填入原始數據法「WhatThreadAmI」調用返回false。
實際發生什麼是真正的 - 真 - 假,隨着填入原始數據法「」 WhatThreadAmI」調用返回true
我知道我必須在這裏失去了一些非常基本的,但有人請幫助。我明白了是怎麼回事?
[異步不是線程](http://stackoverflow.com/q/17661428/11683)。 – GSerg
即使是這樣,當您創建任務時,確實會說'.ConfigureAwait(false)',這意味着「我不需要在原始上下文中恢復」。只要你「等待」那個任務,你的環境就會改變,所以在這裏就不足爲奇了。當你簡單地創建任務但不等待它時,上下文不會改變,所以兩個第一個'WhatThreadAmI'返回'true'。 – GSerg
有道理 - 謝謝! – smodle