.net 您如何评估多个任务的结果

.net 您如何评估多个任务的结果,.net,task-parallel-library,.net,Task Parallel Library,使用TPL,我设置了多个任务(动态创建,可能是一个很大的数字),每个任务返回一个bool,我想检查所有任务返回值是否为true。我该怎么做?可能吗?如果没有,是否可以将共享对象传递给每个任务,并让任务更新此对象 编辑:这将是我的任务的一个例子。ProcessEntity返回一个bool。现在我已经创建并执行了多个这样的任务。我需要检查所有的结果是否属实 private Task<bool> CreateTask(MyEntity entity, Action onStart, Ac

使用TPL,我设置了多个任务(动态创建,可能是一个很大的数字),每个任务返回一个bool,我想检查所有任务返回值是否为true。我该怎么做?可能吗?如果没有,是否可以将共享对象传递给每个任务,并让任务更新此对象

编辑:这将是我的任务的一个例子。ProcessEntity返回一个bool。现在我已经创建并执行了多个这样的任务。我需要检查所有的结果是否属实

 private Task<bool> CreateTask(MyEntity entity, Action onStart, Action onComplete)
    {
        return (new Task<bool>(
            () =>
            {
                onStart.Invoke();
                var result = false;
                try
                {
                    result = ProcessEntity(myEntity);
                }
                catch (Exception ex)
                {
                }

                onComplete.Invoke();
                return result;
            })
               );
    }

 for (int i = 0; i < counter; i++)
        {
            CreateTask(entities[i], () => _taskCounter++, () => _taskCounter--).Start();
        }
private Task CreateTask(MyEntity实体、Action onStart、Action onComplete)
{
返回(新任务)(
() =>
{
onStart.Invoke();
var结果=假;
尝试
{
结果=过程实体(myEntity);
}
捕获(例外情况除外)
{
}
onComplete.Invoke();
返回结果;
})
);
}
对于(int i=0;i_taskCounter++,()=>_taskCounter--)。Start();
}
因此,此时我需要继续执行其他代码,只有在所有任务都返回true时才能执行。

只需查询每个任务的属性,这将等待任务完成并返回结果:

void Main()
{
    var tasks = new List<Task<bool>>();

    // spawn all the tasks
    for (int index = 0; index < 10; index++)  
        tasks.Add(Task.Factory.StartNew(new Func<bool>(GetValue)));

    // now wait for them to return
    bool didAllReturnTrue = tasks.All(t => t.Result);
    // note that if one task returns false, the rest of the tasks will not be
    // waited upon, and will finish in their own time.

    // show the results (LINQPad syntax)
    didAllReturnTrue.Dump();
}

public bool GetValue()
{
    Thread.Sleep(500);
    return true;
}
void Main()
{
var tasks=新列表();
//生成所有任务
对于(int-index=0;index<10;index++)
tasks.Add(Task.Factory.StartNew(newfunc(GetValue)));
//现在等他们回来
bool didAllReturnTrue=tasks.All(t=>t.Result);
//请注意,如果一个任务返回false,则其余任务将不会返回
//等待,并将在自己的时间内完成。
//显示结果(LINQPad语法)
didAllReturnTrue.Dump();
}
公共bool GetValue()
{
睡眠(500);
返回true;
}

请注意,这不会处理任何任务中的异常。您必须在中构建该异常。另外,有了C#5.0/.NET 4.5中新的async/await支持,您也可以编写更异步友好的上述代码,但我将不讨论这个问题。

所有这些都是可能的。如果您向我们展示您的代码以及您尝试过的不起作用的代码,那么会更容易提供帮助。可能重复的问题似乎与此相同。与其提出新的问题,不如修改当前的问题。您已收到多个有关详细信息的请求。是要同步等待任务完成,还是异步执行此操作?另外,如果一些
任务
失败了,该怎么办?@Blam我不这么认为。这似乎是一个单独的问题,尽管两个问题都包含很少的细节。@bum…这是一个不同的问题,它与控制线程数无关,而是关于访问结果谢谢!我需要先完成所有任务,然后访问结果并继续进一步处理