在学习Task时的TaskContinuationOptions枚举发现如下注释:
不知道这边的多任务延续指的是什么,我尝试过“两个ContinueWith串联两个任务或者一个Task并行两个ContinueWith”但是结果都是按照TaskContinuationOptions设置的去执行延续任务。
static void Main(string[] args) { Task<int> t1 = new Task<int>(() => { return 1; }); Task<int> t2 = t1.ContinueWith<int>(Work1, TaskContinuationOptions.NotOnRanToCompletion); Task<int> t3 = t1.ContinueWith<int>(Work1, TaskContinuationOptions.NotOnRanToCompletion); Task<int> t4 = t3.ContinueWith<int>(Work1, TaskContinuationOptions.OnlyOnRanToCompletion); t1.Start(); Console.Read(); } private static int Work1(Task<int> prevTask) { int result = 0; if (prevTask != null && !prevTask.IsFaulted && !prevTask.IsCanceled) { result = prevTask.Result + 1; } else result = 1; Console.WriteLine(result); Thread.Sleep(1000); return result; }
!不懂这个多任务延续无效到底是指什么,请大侠帮解释下。
如果调用多任务延续(即:调用TaskFactory或TaskFactory<TResult>的静态ContinueWhenAll和ContinueWhenAny方法)时,NotOn和On六个标识或标识的组合都是无效的。也就是说,无论先驱任务是如何完成的,ContinueWhenAll和ContinueWhenAny都会执行延续任务。