我有这样的方法:
private async Task DoSomething()
{
// long running work here.
}
当我这样调用方法时,它会阻塞 UI:
Task t = DoSomething();
我必须执行以下操作之一才能使其成为非阻塞的:
Task t = new Task(() => DoSomething());
t.Start();
// Or
Task t = Task.Factory.StartNew(() => DoSomething());
那么当您可以像在框架 4 中一样使用任务并使用 Task.Wait()
代替 await
时,async/await 的意义何在?
编辑: 我理解您的所有答案 - 但没有一个真正解决我的最后一段。谁能给我一个基于任务的多线程示例,其中 async/await 提高了程序的可读性和/或流程?
最佳答案
您如何使用 await
?这不会阻止 UI:
private async Task DoSomething()
{
await Task.Delay(5000);
}
private async void button1_Click(object sender, EventArgs e)
{
await DoSomething();
MessageBox.Show("Finished");
}
请注意,我不必编写任何冗长的回调内容。这就是 async
/await
的意义所在。
关于c# - 异步任务正在卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592957/