static void Main()
{
Task t = new Task(() =>
{
CancellationTokenSource cts = new CancellationTokenSource();
TaskFactory<int> tf = new TaskFactory<int>(cts.Token, TaskCreationOptions.AttachedToParent,
TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);
Task<int>[] Task1 = new[]
{
tf.StartNew(()=>10),
tf.StartNew(()=>100),
tf.StartNew(()=>1000)
};
for (int i = 0; i < Task1.Length; ++i)
{
Task1[i].ContinueWith(task=>cts.Cancel(),TaskContinuationOptions.OnlyOnFaulted);
}
tf.ContinueWhenAll(Task1, Comp => Comp.Where(tc => !tc.IsFaulted && !tc.IsCanceled).Max(tz => { return tz.Result; }),
CancellationToken.None).ContinueWith(p => Console.WriteLine("最大值"+p.Result.ToString()), TaskContinuationOptions.ExecuteSynchronously);
});
t.Start();
Console.ReadLine();
问题: tf.ContinueWhenAll创建的延续任务,为什么使用的task是数组的中一个?
所以问题到底是啥……这也读不通啊……
补充回答:
这问题,只能靠猜。你是不理解
ContinueWhenAll
的用法吗?可以近似理解为: