-1
我正在沿斯蒂芬克萊裏的deadlock example的方向進行實驗。爲什麼在ConfigureAwait(false)後可以觸摸UI線程?
用下面的代碼,我繞過使用ConfigureAwait(false)
僵局(不是一個好的做法,只是爲了演示):
private Uri uri = new Uri("http://ip.jsontest.com/");
public async Task WaitABit()
{
await Task.Delay(3000).ConfigureAwait(false);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var task = WaitABit();
task.Wait();
textbox.Text = "aa";
}
按照我的理解,ConfigureAwait(false)
防止死鎖,因爲的SynchronizationContext不捕獲,因此可以在一個免費的ThreadPool線程上進行延續。
但是,據我所知,一個ThreadPool線程不能直接觸摸UI。那麼這是如何工作的?
爲了防止死鎖,不要阻止'async'代碼。您鏈接的文章使所有這些都非常清晰,閱讀它。你應該'等待''WaitABit'而不是阻塞它。 – JSteward
@JSteward你應該更好地閱讀我的問題。我知道如何「等待」,這只是一個實驗。 – Gigi