代码之家  ›  专栏  ›  技术社区  ›  walterlv

似乎UWP Async IO只是从10.0.17763开始的真正的异步操作,而不是以前的。怎么解释?

  •  2
  • walterlv  · 技术社区  · 6 年前

    在你的电脑里写下这些简单的代码 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线程中,但是我对它们之间的不同行为感到困惑,所以我编写了上面的测试代码。

    0 回复  |  直到 6 年前