Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# Task.WaitAny接受任务<;T>;而不是任务[]_C#_Multithreading_Generics_Task Parallel Library_Task - Fatal编程技术网

C# Task.WaitAny接受任务<;T>;而不是任务[]

C# Task.WaitAny接受任务<;T>;而不是任务[],c#,multithreading,generics,task-parallel-library,task,C#,Multithreading,Generics,Task Parallel Library,Task,我有一个标记为执行的通用任务集合。当任务完成时(使用task.WaitAny),我将其添加到可观察集合 但是,问题出现在Task.WaitAny(…)行,该行表示从Task[]到Task[]的共变量数组转换可能会导致写操作时出现运行时异常。 我相当了解这个例外的含义,以及它在现阶段抱怨的原因 问题:是否有任何通用版本的Task.WaitAny(),可以将Task作为参数,而不是Task[] 提前谢谢 有一个通用的任务 public static Task<Task<TResult&g

我有一个标记为执行的通用任务集合。当任务完成时(使用
task.WaitAny
),我将其添加到
可观察集合

但是,问题出现在
Task.WaitAny(…)
行,该行表示从Task[]到Task[]的共变量数组转换可能会导致写操作时出现运行时异常。

我相当了解这个例外的含义,以及它在现阶段抱怨的原因

问题:是否有任何通用版本的
Task.WaitAny()
,可以将
Task
作为参数,而不是
Task[]

提前谢谢


有一个通用的
任务

public static Task<Task<TResult>> WhenAny<TResult>(IEnumerable<Task<TResult>> tasks);
public static Task<Task<TResult>> WhenAny<TResult>(params Task<TResult>[] tasks);
公共静态任务(IEnumerable任务);
公共静态任务WhenAny(参数任务[]任务);
等待
完成任务。

您可以使用它,在您的情况下,它甚至可以像这样简化代码

var result = new ObservableCollection<LenderScoreCard>();
var parallelScoreList = parallelScore.ToList();
while (parallelScoreList.Count != 0)
{
    var completedTask = Task.WhenAny(parallelScoreList).Result;
    result.Add(completedTask.Result);
    parallelScoreList.Remove(completedTask);
}
var result=新的ObservableCollection();
var parallelScoreList=parallelScore.ToList();
while(parallelScoreList.Count!=0)
{
var completedTask=Task.WhenAny(parallelScoreList).Result;
result.Add(completedTask.result);
parallelScoreList.Remove(completedTask);
}

可能与@chuex重复该问题的答案已过时。现在有一种更好的方法。@Nair:为什么要从一个可观察集合中开始任务?当然他们没有被数据绑定…@StephenCleary,这段代码只是一个精简版本来演示这个问题。现在回答您的问题,单个任务的结果必须绑定到WPF中的控件,目的是拥有响应式UI。@奈尔:您不能绑定到
任务。结果
和响应式UI。感谢您的支持。抱歉,我正在使用.NET 4。@Nair如果您在VS 2012或更高版本中使用.NET 4,您可以从nuget获得Microsoft.Bcl.Async软件包并使用TaskEx.WhenAny。感谢您的支持。很抱歉,我正在使用.NET 4。@Nair:Np,然后忽略警告-
任务。WaitAny
不会修改传递的数组。