Threading.Tasks.Task 'не содержит определения для' Result '
Итак, я пытаюсь научиться программировать с помощью Task, и я выполняю упражнение:
public static int ReturnFirstResult(Func<int>[] funcs)
{
Task[] tasks = new Task[funcs.Length];
for (int i = 0; i < funcs.Length; i++)
{
tasks[i] = CreatingTask(funcs[i]);
}
return Task<int>.Factory.ContinueWhenAny(tasks, (firstTask) =>
{
Console.WriteLine(firstTask.Result);
return ***????***;
}).***Result***;
}
private static Task CreatingTask(Func<int> func)
{
return Task<int>.Factory.StartNew(() => { return func.Invoke(); });
}
Я даю массив Funcs для запуска, идеал должен вернуть результат первой этой функции, которая была выполнена.
Проблема в том, что поле Результат не доступно...
Что мне здесь не хватает?
Ответы
Ответ 1
Вы возвращаете Task
из метода CreatingTask
- вам нужно вернуть Task<int>
, а затем изменить tasks
как Task<int>[]
вместо Task[]
.
В принципе, Task
представляет задачу, которая не дает результата, тогда как Task<T>
представляет задачу, создающую результат типа T
. В вашем случае все в вашем коде возвращает int
, поэтому вам нужно Task<int>
всюду.
Ответ 2
Вы получите эту ошибку, если попытаетесь использовать .Result
для объекта Task
. Это может быть потому, что вы хотели использовать Task<T>
. Но если вы хотите использовать Task и хотите, чтобы он возвращался без использования await, тогда Task походит на void и не дает результата. .Wait()
этого вы можете использовать .Wait()
. Это возвращает пустоту.