27

因此,我正在尝试学习如何使用 Task's 进行编程,并且正在做一个练习:

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(); });
}

我给了一个函数数组来运行,想法是返回第一个函数的结果。问题是字段结果不可用......

我在这里缺少什么?

4

2 回答 2

50

您正在Task从该CreatingTask方法返回 - 您需要 return Task<int>,然后更改tasks为 beTask<int>[]而不是Task[].

基本上,Task表示不产生结果Task<T>的任务 - 而表示产生类型结果的任务T。在您的情况下,整个代码中的所有内容都返回int,因此您需要Task<int>无处不在。

于 2012-07-04T17:26:35.537 回答
5

如果您尝试.ResultTask对象上使用,您将收到此错误。这可能是因为您打算使用Task<T>. 但是,如果您想使用 Task 并且希望它在不使用 await 的情况下返回,那么 Task 就像 void 并且没有结果。你可以.Wait()改用。这将返回无效。

于 2019-04-16T15:56:05.217 回答