Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用并行编程来评估第一个执行方法的结果_C#_.net_Parallel Processing_Task Parallel Library - Fatal编程技术网

C# 使用并行编程来评估第一个执行方法的结果

C# 使用并行编程来评估第一个执行方法的结果,c#,.net,parallel-processing,task-parallel-library,C#,.net,Parallel Processing,Task Parallel Library,给定以下数组Func[]funcs并使用TPL(Task Parallel Library.NET),如何计算调用funcs中的任何函数返回的第一个结果 这里的主要约束是并行运行所有方法,并在返回第一个方法时停止 方法定义如下: public static int EvalFirstResult(Func<int>[] funcs); public static int EvalFirstResult(Func[]funcs); 因此,首先我们需要将每个函数转换为一个任务。这是通过

给定以下数组
Func[]funcs
并使用TPL(Task Parallel Library.NET),如何计算调用
funcs
中的任何函数返回的第一个结果

这里的主要约束是并行运行所有方法,并在返回第一个方法时停止

方法定义如下:

public static int EvalFirstResult(Func<int>[] funcs);
public static int EvalFirstResult(Func[]funcs);

因此,首先我们需要将每个函数转换为一个任务。这是通过
选择
任务完成的。运行
。然后,一旦我们有了它,我们就可以使用
Task.WaitAny
来获得第一个要完成的任务的结果

var tasks = funcs.Select(function => Task.Run(function)).ToArray();
int result = Task.WaitAny(tasks);

请注意,剩余的任务仍将完成;我们没有阻止它们,我们只是忽略了它们的结果。

因此,首先我们需要将每个函数转换为一个
任务。这是通过
选择
任务完成的。运行
。然后,一旦我们有了它,我们就可以使用
Task.WaitAny
来获得第一个要完成的任务的结果

var tasks = funcs.Select(function => Task.Run(function)).ToArray();
int result = Task.WaitAny(tasks);

请注意,剩余的任务仍将完成;我们没有阻止他们,我们只是忽略了他们的结果。

你想并行运行他们,等待第一个任务完成,逃跑或取消其他任务很重要吗?在第一个任务完成后,我不想等待其他任务的结果。我只需要完成第一个函数的结果。是否要并行运行它们,等待第一个任务完成,并且逃跑或取消其他任务很重要?在第一个任务完成后,我不想等待其他任务的结果。我只需要完成第一个函数的结果。我需要在其中一个函数完成后返回。我不想等待每个函数都完成。顺便说一句,我不能在.NET4.5中使用Task.Run(方法不存在)。根据您的回答,我设法得到了它。var tasks=funcs.Select(f=>Task.Factory.StartNew(f)).ToArray();return Task.WaitAny(任务);谢谢@illusionpt
Task.Run
已添加到4.5中。如果您没有,那么您必须使用4.0。我需要在其中一个函数完成后返回。我不想等待每个函数都完成。顺便说一句,我不能在.NET4.5中使用Task.Run(方法不存在)。根据您的回答,我设法得到了它。var tasks=funcs.Select(f=>Task.Factory.StartNew(f)).ToArray();return Task.WaitAny(任务);谢谢@illusionpt
Task.Run
已添加到4.5中。如果您没有,那么您必须使用4.0。