C#中Task.FromResult <TResult>的用法是什么

在C#和TPL( 任务并行库 )中, Task类表示一个正在进行的工作,产生一个Ttypes的值。

我想知道什么是Task.FromResult方法的需要?

那就是:在一个已经产生了价值的情况下,有什么需要把它重新包装到一个任务中?

唯一想到的是它被用作接受Task实例的其他方法的一些适配器。

我发现了两种常见的用例:

  1. 当你实现一个允许asynchronous调用者的接口时,但是你的实现是同步的。
  2. 当你琢磨/嘲笑asynchronous代码进行testing。

一个例子是使用caching的方法。 如果结果已经计算完毕,则可以使用该值返回已完成的任务(使用Task.FromResult )。 如果不是,那么你继续并返回代表正在进行的工作的任务。

caching示例: 使用Task.FromResult作为预先计算的值的caching示例

来自MSDN:

当您执行返回Task对象的asynchronous操作时,此方法非常有用,并且该Task对象的结果已经计算出来。

http://msdn.microsoft.com/en-us/library/hh228607.aspx

当您想要创build一个不使用async关键字的等待方法时使用它。 我发现这个例子:

 public class TextResult : IHttpActionResult { string _value; HttpRequestMessage _request; public TextResult(string value, HttpRequestMessage request) { _value = value; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { var response = new HttpResponseMessage() { Content = new StringContent(_value), RequestMessage = _request }; return Task.FromResult(response); } } 

在这里,您正在创build自己的IHttpActionResult接口的实现,以便在Web Api操作中使用。 ExecuteAsync方法预计是asynchronous的,但不必使用async关键字使其asynchronous和等待。 既然你已经有了结果,不需要等待任何事情,最好使用Task.FromResult。

当您想要进行asynchronous操作时,请使用Task.FromResult,但有时会同步处理结果。 你可以在http://msdn.microsoft.com/en-us/library/hh228607.aspxfind一个很好的示例。;