Что используется для Task.FromResult в C #

В C # и TPL ( параллельная библиотека Task class Task представляет собой текущую работу, которая производит значение типа T.

Я хотел бы знать, в чем заключается необходимость метода Task.FromResult ?

То есть: В сценарии, в котором у вас уже есть готовое значение, нужно ли его снова вставить в Задачу?

Единственное, что приходит на ум, это то, что он используется в качестве адаптера для других методов, принимающих экземпляр Task.

Есть два распространенных случая использования, которые я нашел:

  1. Когда вы реализуете интерфейс, который позволяет асинхронным абонентам, но ваша реализация является синхронной.
  2. Когда вы стучите / издевательски asynchronous код для тестирования.

Одним из примеров может служить метод, который использует кеш. Если результат уже вычислен, вы можете вернуть завершенную задачу со значением (используя Task.FromResult ). Если это не так, то вы идете вперед и возвращаете задачу, представляющую текущую работу.

Пример кэша: пример кэша с использованием Task.FromResult для предварительно вычисленных значений

Используйте его, если хотите создать ожидаемый метод, не используя ключевое слово async. Я нашел этот пример:

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

Здесь вы создаете собственную реализацию интерфейса IHttpActionResult, который будет использоваться в действии Web Api. Ожидается, что метод ExecuteAsync будет асинхронным, но вам не нужно использовать ключевое слово async, чтобы сделать его асинхронным и ожидаемым. Поскольку у вас уже есть результат и вам не нужно ничего ждать, лучше использовать Task.FromResult.

Из MSDN:

Этот метод полезен, когда вы выполняете асинхронную операцию, возвращающую объект Task, и результат этого объекта Task уже вычисляется.

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

Используйте Task.FromResult, если вы хотите иметь асинхронную операцию, но иногда результат выполняется синхронно. Вы можете найти хороший образец здесь http://msdn.microsoft.com/en-us/library/hh228607.aspx .

Давайте будем гением компьютера.