所以我正在努力学习如何用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的结果。 问题是字段结果不可用......
我在这里缺少什么?
答案 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。