【发布时间】:2016-04-21 17:22:59
【问题描述】:
在我的应用程序中,我有一个List<Task<Boolean>>,我在Task.Wait[..] 上确定它们是否成功完成(Result = true)。虽然如果在我等待的过程中 Task 完成并返回一个虚假值,我想取消所有其他 Task 我正在等待并基于此做一些事情。
我已经创建了两个“丑陋”的方法来做到这一点
// Create a CancellationToken and List<Task<..>> to work with
CancellationToken myCToken = new CancellationToken();
List<Task<Boolean>> myTaskList = new List<Task<Boolean>>();
//-- Method 1 --
// Wait for one of the Tasks to complete and get its result
Boolean finishedTaskResult = myTaskList[Task.WaitAny(myTaskList.ToArray(), myCToken)].Result;
// Continue waiting for Tasks to complete until there are none left or one returns false
while (myTaskList.Count > 0 && finishedTaskResult)
{
// Wait for the next Task to complete
finishedTaskResult = myTaskList[Task.WaitAny(myTaskList.ToArray(), myCToken)].Result;
if (!finishedTaskResult) break;
}
// Act on finishTaskResult here
// -- Method 2 --
// Create a label to
WaitForOneCompletion:
int completedTaskIndex = Task.WaitAny(myTaskList.ToArray(), myCToken);
if (myTaskList[completedTaskIndex].Result)
{
myTaskList.RemoveAt(completedTaskIndex);
goto WaitForOneCompletion;
}
else
;// One task has failed to completed, handle appropriately
我想知道是否有更清洁的方法可以做到这一点,可能使用 LINQ?
【问题讨论】:
标签: c# linq task-parallel-library