Web Api中的C#await / async,重点是什么?

时间:2014-09-08 01:37:22

标签: c# asp.net-mvc asp.net-web-api single-page-application

有人知道这样做的目的是什么?

 private async Task<bool> StoreAsync(TriviaAnswer answer) { ... }

 [ResponseType(typeof(TriviaAnswer))]
 public async Task<IHttpActionResult> Post(TriviaAnswer answer)
 {
     var isCorrect = await StoreAsync(answer);
     return Ok<bool>(isCorrect);
 }

通过检查,它告诉它异步运行私有方法,但同步等待它结束。我的问题是,这有什么意义吗?或者这只是一种奇特而无用的技巧?我在研究Web API / MVC / SPA的一些代码时遇到了这个问题。

无论如何,任何见解都会有用。

1 个答案:

答案 0 :(得分:8)

尽管它的名字,await实际上并没有像Thread.Join那样工作。 asyncawait是Microsoft的coroutines实现,使用Continuation Passing Style实现。重新排序工作,以便在Task<T>完成时继续处理。编译器重新安排指令以最大限度地利用异步操作。

This article如此解释:

await表达式不会阻塞正在执行它的线程。相反,它会导致编译器将其余的异步方法注册为等待任务的延续。然后,Control返回到异步方法的调用者。当任务完成时,它会调用它的继续,异步方法的执行将在它停止的地方恢复。

对于一些简单的代码示例,await并没有多大意义,因为在您等待的同时,您无法做其他工作。