所以我正在尝试学习如何用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(); });
}
Run Code Online (Sandbox Code Playgroud)
我正在给一个Funcs数组运行,ideia是返回第一个完成func的结果.问题是字段结果不可用...
我在这里缺少什么?
Jon*_*eet 37
你返回Task从CreatingTask方法-你需要返回Task<int>,然后更改tasks要Task<int>[]代替Task[].
基本上,Task代表一个不产生结果Task<T>的任务- 而代表产生类型结果的任务T.在您的情况下,代码中的所有内容都会返回int,因此您Task<int>无处不在.
如果您尝试.Result在Task对象上使用,则会收到此错误。这可能是因为您打算使用Task<T>. 但是,如果您想要使用 Task 并且希望它在不使用 await 的情况下返回,那么 Task 就像 void 并且没有结果。你可以.Wait()改用。这将返回无效。