【发布时间】:2012-09-26 18:06:56
【问题描述】:
我有这样的方法:
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的目的不是多线程。它用于异步编程。您可以使用Task.Run进行多线程,但async也可以与其他异步操作(例如I/O)一起使用。基于任务的异步模式非常强大,因为它可以以相同的方式处理任何异步操作(无论是 CPU 密集型、I/O 密集型还是其他)。
标签: c# .net-4.5 async-await