0
我想改進以下代碼以添加取消支持。基本上,我需要做的是一旦孩子拋出異常,取消所有孩子以及父任務。我寫了下面的代碼作爲學習經驗。只有孩子們完成後,我才能看到AggregateException
,但我不想那樣。當其中一個引發異常時取消子任務
static int GetSum()
{
var parent = Task<int>.Factory.StartNew(() =>
{
var children = new Task<int>[100];
for (var i = 0; i < children.Length; i++)
{
var index = i;
children[index] = Task<int>.Factory.StartNew(() =>
{
var randomNumber = new Random().Next(5);
if (randomNumber == 0)
{
throw new Exception();
}
return randomNumber;
}, TaskCreationOptions.AttachedToParent);
}
Task.WaitAll();
Console.WriteLine("Children finished");
return children.Sum(t => t.Result);
});
parent.Wait();
Console.WriteLine("Parent finished");
return parent.Result;
}
我相信我需要使用下面的,雖然我不知道如何:
var source = new CancellationTokenSource();
var token = source.Token;
你已經採取了看看http://msdn.microsoft.com/en-us/library/dd537607(v=vs.110).aspx –