c# - Async/Await 在 Windows 窗体应用程序中工作,但它不应该
问题描述
基于MSDN 文章,以下代码在 Windows 窗体应用程序中不应该工作,我非常确定,它过去不能工作,但最近我发现,在 .NET 框架 4.7.02558 中它工作。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Test()
{
Console.WriteLine("One");
var d = DelayAsync();
Console.WriteLine("Three");
d.Wait();
Console.WriteLine("Five");
}
private async Task DelayAsync()
{
Console.WriteLine("Two");
await Task.Delay(1000);
Console.WriteLine("Four");
}
private void Button1_Click(object sender, EventArgs e)
{
Test();
}
}
我是否错过了一些发布日志,或者有什么问题(我的意思是从用户的角度来看)?
编辑:从等待的代码返回后,应用程序应该冻结,因为在 Windows 窗体中使用了 CurrentContextSheduller。
解决方案
在 4.7.1 上测试我得到以下结果:
一
二三
_
Four
,并且Five
永远不会显示。对我来说,这似乎是“没有按预期工作”,因为执行await Task.Delay(1000);
是阻塞的。
推荐阅读
- r - 带有 caret::knn3() 的预测变量中的许多类别给出了后端数组错误的列名
- javascript - 如何在更改某个值时重新加载功能组件
- python - 将季度数据框转换为月度数据并填充每个 ID 的缺失值
- android - Room 什么时候开始应用迁移?
- javascript - 如果用户已经通过登录页面或 auth0 进行身份验证,我们是否需要在 websocket 连接中对用户进行身份验证?
- c - 当常量在另一个文件中定义时无法修改
- windows - PGAdmin 4:无法恢复文件名中包含国际语言字符的备份文件
- vue.js - 未捕获(承诺)错误:Ziggy 错误:路由“咨询服务/心理健康咨询”不在路由列表中
- javascript - 如何在自定义上下文菜单 React Syncfusion 树网格上访问自定义事件?
- java - Mockito 不理解在反射方法上调用 method.invoke()