在你的电脑里写下这些简单的代码
MainPage
:
private void Button_Click(object sender, RoutedEventArgs e)
{
// It is not recommended to call Wait() in a UI thread. I write this only for a test.
DoAsync().Wait();
// This line enters on 10.0.17134 / 10.0.16299
// and never enters on 10.0.17763.
}
private async Task DoAsync()
{
await ApplicationData.Current.LocalFolder.CreateFileAsync("walterlv", CreationCollisionOption.ReplaceExisting);
}
目标为10.0.17134或更低
通常,如果
DoAsync
是一个真正的异步操作
Wait()
会导致死锁。但如果你负责
Button_Click
,您会发现死锁不会发生。
尝试多次单击该按钮,您将看到在随机单击计数之后发生死锁。
我也试过10.0.116299。
目标10.0.17763
当您单击按钮时,死锁立即发生。
我的困惑
高于或低于10.0.17134的异步操作有什么区别?
通知
:不建议拨打
等待()
或
Result
在UI线程中,但是我对它们之间的不同行为感到困惑,所以我编写了上面的测试代码。