В C # и TPL ( Task Parallel Library ) Task
класс представляет собой текущую работу, которая создает значение типа T.
Я хотел бы знать, что нужно для метода Task.FromResult ?
То есть: в сценарии, где у вас уже есть произведенная ценность, зачем нужно возвращать ее в задачу?
Единственное, что приходит на ум, это то, что он используется как какой-то адаптер для других методов, принимающих экземпляр Task.
c#
.net
task-parallel-library
task
async-await
лизергиновой кислоты
источник
источник
Ответы:
Я нашел два варианта использования:
источник
Task.FromResult
и клиент, который ожидает асинхронно для сетевого ввода-вывода. Таким образом, вы можете использовать один и тот же интерфейс между клиентом и сервером, используяChannelFactory
.IEnumerable<T>
наследованиеIDisposable
- оно позволяет перечисляемым иметь одноразовые ресурсы, а не заставляет их. НиFromResult
,async
ниawait
темы не будут порождены.Task
возвратный метод» означает « может быть асинхронным». Поэтому иногда методы получают асинхронную сигнатуру, прекрасно зная, что некоторые реализации будут синхронными (например,NetworkStream
должны быть асинхронными, ноMemoryStream
должны быть синхронизированы).Одним из примеров будет метод, который использует кэш. Если результат уже вычислен, вы можете вернуть выполненное задание со значением (используя
Task.FromResult
). Если это не так, то вы продолжаете и возвращаете задачу, представляющую текущую работу.Пример кэширования: пример кэширования с использованием Task.FromResult для предварительно вычисленных значений
источник
Task.FromResult
, могут быть кэшированы.Task.FromResult(0)
,Task.FromResult(1)
,Task.FromResult(false)
иTask.FromResult(true)
кэшируются. Вы не должны кэшировать задачу для доступа к сети, но одна из результатов отлично подходит. Вы бы предпочли создавать его каждый раз, когда вам нужно вернуть значение?Используйте его, когда вы хотите создать ожидаемый метод без использования ключевого слова async. Я нашел этот пример:
Здесь вы создаете собственную реализацию интерфейса IHttpActionResult для использования в действии Web Api. Ожидается, что метод ExecuteAsync будет асинхронным, но вам не нужно использовать ключевое слово async, чтобы сделать его асинхронным и ожидаемым. Поскольку у вас уже есть результат и вам не нужно ничего ждать, лучше использовать Task.FromResult.
источник
Из MSDN:
http://msdn.microsoft.com/en-us/library/hh228607.aspx
источник
Используйте Task.FromResult, когда вы хотите выполнить асинхронную операцию, но иногда результат находится в руках синхронно. Вы можете найти хороший образец здесь http://msdn.microsoft.com/en-us/library/hh228607.aspx .
источник
Task.FromResult
используются для получения ранее кэшированного асинхронного результата.Я бы сказал, что вы можете использовать Task.FromResult для синхронных методов, выполнение которых занимает много времени, в то время как вы можете выполнять другую независимую работу в своем коде. Я бы предпочел, чтобы эти методы вызывали async. Но представьте себе ситуацию, когда у вас нет контроля над вызываемым кодом, и вы хотите эту неявную параллельную обработку.
источник