2016-05-11 3 views
-1

Не могли бы вы объяснить, почему я получил следующую ошибку. Код ниже предназначен только для демонстрации.Async/Await un unwipping task

«System.Threading.Tasks.Task» не содержит определение для «уравновешивания»

var items = Enumerable.Range(1, 10).Select(async x => await DoStuff()); 

var trimmedThings = items.Select(x => x.Trim()); 

public async Task<string> DoStuff() { //Do Stuff }; 

Я думал, используя AWAIT бы разворачивать задачу, обнажая строку, поэтому тип пункты будут Enumerable<string>, а не Enumerable<Task<string>>

ответ

2

Я думал, что с помощью AWAIT бы разворачивать задачу

Он делает. await DoStuff() возвращает string, не Task<string>, но как метод является async метод, метод должен возвращать Task, поэтому он будет завернуть возвращаемое значение в задачу, то есть конечный результат async x => await DoStuff() идентичен просто писать x => Dostuff() Вы просто не обертываете, а затем снова обертываете свой подарокTask.