我有这样的方法:
private async Task DoSomething()
{
// long running work here.
}
当我打电话这样它会阻止用户界面的方法:
Task t = DoSomething();
我要做的其中之一,使其非阻塞:
Task t = new Task(() => DoSomething());
t.Start();
// Or
Task t = Task.Factory.StartNew(() => DoSomething());
那么,什么是异步电动机/等待时,你可以使用任务,因为他们在框架4,使用点Task.Wait()
代替await
?
编辑:我明白你的答案的 - 但没有真正解决我的最后一段。 谁能给我工作的一个例子基于多线程异步哪里/ AWAIT提高了程序的可读性和/或流动?
async
方法同步开始它们的执行。 async
是构成异步操作是有用的,但它不会神奇地让另一个线程上运行的代码,除非你告诉它。
您可以使用Task.Run
调度CPU绑定工作提高到一个线程池线程。
见我的async
/ await
开场后或async
常见问题以获取更多信息。
你如何使用await
? 这不会阻止用户界面:
private async Task DoSomething()
{
await Task.Delay(5000);
}
private async void button1_Click(object sender, EventArgs e)
{
await DoSomething();
MessageBox.Show("Finished");
}
请注意,我没有写任何详细回调的东西。 这点async
/ await
。
如果没有实际的代码,这是很难告诉你这是怎么回事,但你就可以开始你的DoSomething“等待Task.Yield();” 迫使其立即返回,在什么运行之前,首先是AWAIT什么导致你的UI问题的情况下。