Threading.Tasks.Task'不包含'Result'的定义

时间:2012-07-04 17:25:36

标签: c# .net task

所以我正在努力学习如何用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(); });
}

我正在运行一个Func数组,ideia将返回第一个完成func的结果。 问题是字段结果不可用......

我在这里缺少什么?

2 个答案:

答案 0 :(得分:33)

您正在从Task方法返回CreatingTask - 您需要返回Task<int>,然后将tasks更改为Task<int>[]而不是{{} 1}}。

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

答案 1 :(得分:0)

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