似乎UWP Async IO在10.0.17763之后才是真正的异步操作,但在以前不是真正的异步操作。怎么解释呢?

似乎UWP Async IO在10.0.17763之后才是真正的异步操作,但在以前不是真正的异步操作。怎么解释呢?,uwp,async-await,deadlock,windows-10-universal,Uwp,Async Await,Deadlock,Windows 10 Universal,只需在您的主页中编写以下简单代码: 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 //

只需在您的
主页
中编写以下简单代码:

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()
将导致死锁。但是如果您运行
按钮,单击
,您会发现死锁不会发生

尝试单击按钮几次,您将看到在随机单击计数后发生死锁

我也试过10.0.116299

目标10.0.17763 当您单击该按钮时,死锁立即发生

我的困惑 高于或低于10.0.17134的异步操作之间有什么区别


注意:不建议在UI线程中调用
Wait()
Result
,但我对它们之间的不同行为感到困惑,因此我编写了上面的测试代码。

这很奇怪。在这种情况下,我几乎觉得创建文件夹是个问题,而不是
Wait()
;如果这是所有的代码。@MichaelPuckettII是的,这是所有的代码,任何人都可以复制和粘贴代码来重现这个问题。我还认为,
CreateFileAsync
的行为已经从有时异步变为始终异步。谢谢,我没有时间使用ATM,但我确实计划尝试并复制它,因为这对我来说很奇怪。