zoukankan      html  css  js  c++  java
  • What is the use for Task.FromResult<TResult> in C#(转载)

    问:


    In C# and TPL (Task Parallel Library), the Task class represents an ongoing work that produces a value of type T.
    I'd like to know what is the need for the Task.FromResult method ?
    That is: In a scenario where you already have the produced value at hand, what is the need to wrap it back into a Task?
    The only thing that comes to mind is that it's used as some adapter for other methods accepting a Task instance.

    答1:


    There are two common use cases I've found:

    1. When you're implementing an interface that allows asynchronous callers, but your implementation is synchronous.
    2. When you're stubbing/mocking asynchronous code for testing.

    答2:


    Use it when you want to create an awaitable method without using the async keyword. I found this example:

    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);
        }
    }

    Here you are creating your own implementation of the IHttpActionResult interface to be used in a Web Api Action. The ExecuteAsync method is expected to be asynchronous but you don't have to use the async keyword to make it asynchronous and awaitable. Since you already have the result and don't need to await anything it's better to use Task.FromResult.

    From MSDN:

    This method is useful when you perform an asynchronous operation that returns a Task object, and the result of that Task object is already computed.

    原文链接

  • 相关阅读:
    Python进阶03 模块
    Python进阶02 文本文件的输入输出
    Python进阶01 词典
    Python基础10 反过头来看看
    Python基础09 面向对象的进一步拓展
    Python基础08 面向对象的基本概念
    Python基础07 函数
    Vuex源码分析(转)
    Vue2.x双向数据绑定
    Angular2的双向数据绑定
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/12210413.html
Copyright © 2011-2022 走看看