lys*_*cid 170 .net c# task task-parallel-library async-await
在C#和TPL(任务并行库)中,Task该类表示正在进行的工作,它产生类型为T的值.
我想知道Task.FromResult方法有什么需要?
那就是:在您已经拥有生产价值的情况下,需要将其包装回任务中?
我唯一想到的是它被用作接受Task实例的其他方法的一些适配器.
Ste*_*ary 235
我发现了两个常见的用例:
Mat*_*ith 48
一个示例是使用高速缓存的方法.如果已经计算了结果,则可以使用值(使用Task.FromResult)返回已完成的任务.如果不是,那么您继续并返回代表正在进行的工作的任务.
缓存示例:使用Task.FromResult为预先计算的值缓存示例
Edm*_*son 28
如果要在不使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,您将创建自己的IHttpActionResult接口实现,以在Web Api Action中使用.ExecuteAsync方法应该是异步的,但您不必使用async关键字使其异步和等待.由于您已经拥有结果并且不需要等待任何事情,因此最好使用Task.FromResult.
小智 19
来自MSDN:
当您执行返回Task对象的异步操作并且已经计算了该Task对象的结果时,此方法很有用.
http://msdn.microsoft.com/en-us/library/hh228607.aspx
当您想要异步操作但有时结果是同步的时,请使用 Task.FromResult。您可以在这里找到一个很好的示例http://msdn.microsoft.com/en-us/library/hh228607.aspx。