[英]async Task is freezing the UI
我有这样的方法:
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());
那么,什么是点异步/的await时,你可以使用任务,因为他们在框架4和使用Task.Wait()
代替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
。
async
方法开始同步执行。 async
对于组成异步操作很有用,但是除非您告知,否则它不会神奇地使代码在另一个线程上运行。
您可以使用Task.Run
将CPU绑定的工作调度到线程Task.Run
线程。
有关更多信息,请参见我的async
/ await
简介或async
常见问题解答 。
没有实际的代码,很难告诉您发生了什么,但是您可以使用“ await Task.Yield();”开始DoSomething。 强制它立即返回,以防第一次等待前运行的是导致UI问题的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.