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(). Это возвращает пустоту.