await Task<T>
与 Task<T>.Result
对比
理解 await Task<T>
和 Task<T>.Result
之间的核心区别对于有效的异步编程至关重要。让我们用一个实际的例子来说明这一点。
考虑这个方法:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return nameTask.Result; }</code>
这里,Task<T>.Result
用于检索任务的结果。 但是,这种方法可能会严重影响并发性,因为它强制调用线程同步等待任务完成。
异步编程使用 await
运算符优雅地解决了这个问题,它允许非阻塞挂起。 这是改进的异步版本:
<code class="language-csharp">public async Task<string> GetName(int id) { Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id)); return await nameTask; }</code>
使用await
,调用线程被释放,允许其他任务继续进行。 一旦等待的任务完成,线程就会恢复,并且结果会无缝返回。
本质上:await Task<T>
通过让出线程来促进真正的异步操作,而 Task<T>.Result
会阻塞线程直到任务完成。 一个关键的区别是如何处理异常:Result
将异常包装在 AggregateException
中,而 await
直接重新抛出原始异常。
以上是Await Task 与 Task.Result:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!