【发布时间】:2021-10-15 14:58:48
【问题描述】:
我有一个这样的异步方法:
private async Task TaskAsync()
{
await Task.Run(() => Task.Delay(2000));
}
然后我在一个按钮单击事件中调用它,我已经声明如下:
private async void button1_Click(object sender, EventArgs e)
{
await TaskAsync();
MessageBox.Show("Afterwards.");
}
现在,当我单击按钮时,TaskAsync() 确实处于等待状态,并且直到 TaskAsync() 完成执行后才会显示消息框。但是,当我在点击事件中调用TaskAsync()时删除await命令,然后执行立即跳转到消息框。
我在这里做错了吗?这是 async...await 的正常行为吗?
我的项目是一个 .NET Core 5 C# winform 项目。
【问题讨论】:
-
有两个问题。首先,
TaskAsync方法使用Task.Run运行另一个 异步方法。那只是浪费一个线程。它应该只是await Task.Delay(2000);。其次,如果您不等待任务执行将立即进行。这就是使用await的全部意义——等待已经执行的异步任务完成
标签: winforms asynchronous async-await event-handling .net-5