异步任务正在冻结 UI

Pet*_*eGO 6 c# async-await .net-4.5

我有一个这样的方法:

private async Task DoSomething()
{
    // long running work here.
}
Run Code Online (Sandbox Code Playgroud)

当我调用这样的方法时,它会阻止 UI:

Task t = DoSomething();
Run Code Online (Sandbox Code Playgroud)

我必须执行以下操作之一才能使其非阻塞:

Task t = new Task(() => DoSomething());
t.Start();

// Or

Task t = Task.Factory.StartNew(() => DoSomething());
Run Code Online (Sandbox Code Playgroud)

Task.Wait()那么,当您可以像框架 4 中那样使用 Tasks 并代替时, async/await 的意义何在await

编辑:我理解你所有的答案 - 但没有一个真正解决我的最后一段。谁能给我一个基于任务的多线程示例,其中异步/等待提高了程序的可读性和/或流程?

Ste*_*ary 2

async方法同步开始执行。async对于编写异步操作很有用,但它不会神奇地使代码在另一个线程上运行,除非您告诉它。

您可以用来Task.Run将 CPU 密集型工作调度到线程池线程。

请参阅我的async/await介绍帖子async常见问题解答以获取更多信息。