【发布时间】:2016-06-03 17:10:24
【问题描述】:
我正在使用任务来执行计算密集型操作。 PerformCalculation 方法。主父任务使用任务工厂创建三个子任务并开始执行。每个子任务应返回
List<Dictionary<int,double>>
List<double> paramList = new List<double>{ 2, 2.5, 3};
CancellationTokenSource cts = new CancellationTokenSource();
Task parent = new Task(() =>
{
var tf = new TaskFactory<List<Dictionary<int, double>>>(cts.Token, TaskCreationOptions.AttachedToParent,
TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);
var childTasks = new[] {
tf.StartNew(() => PerformCalculation(cts.Token, paramList[0],Task.CurrentId)),
tf.StartNew(() => PerformCalculation(cts.Token, paramList[1],Task.CurrentId)),
tf.StartNew(() => PerformCalculation(cts.Token, paramList[2],Task.CurrentId)) //3rd entry
};
子任务执行成功后的结果应该是List<Dictionary<int, double>>的形式。
现在我的要求是编写一个 lambda 表达式,该表达式将在所有子任务完成执行后查询其结果并填充到另一个列表中
即列表列表 (List<List<Dictionary<int, double>>>)
// When all children are done, get the value returned from the
// non-faulting/canceled tasks.
tf.ContinueWhenAll(childTasks, completedTasks =>
completedTasks
.Where(t => t.Status == TaskStatus.RanToCompletion)**??Need HELP HERE ???**),CancellationToken.None)
,TaskContinuationOptions.ExecuteSynchronously);
});
【问题讨论】:
标签: c# .net lambda .net-4.0 task