uwp - 似乎 UWP Async IO 仅在 10.0.17763 之后才是真正的异步操作,但在此之前不是真正的。怎么解释?
问题描述
只需在下面写下这个简单的代码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 以上或以下的异步操作有什么区别?
注意:不建议在 UI 线程中调用Wait()
or Result
,但是我对它们之间的不同行为感到困惑,所以我已经编写了上面的测试代码。
解决方案
推荐阅读
- php - 如何在php中以某种模式生成参考号
- android - Dagger2 绑定丢失
- python - 使用嵌套列表推导创建随机 0 和 1 的矩阵
- javascript - 为什么要在减速机中使用开关盒?
- python - 在 Tkinter 中使用计时器制作 GUI?
- javascript - 页面中未出现 Javascript 函数结果(本地测试):如何识别问题?
- php - 如何在chrome打包的应用程序中使用php返回的数据
- c# - Unity:SignalR 连接在编辑器中工作但在设备中不工作(apk)
- docker - Docker 镜像清理如何在 Kubernetes 上工作?
- c++ - 无法在 dx11 中将两个纹理设置为着色器