启动新任务和子任务
1 private static void StartNewTask() 2 { 3 //创建并启动一个Task 4 Task<string> task = Task.Run(() => TaskTest("TaskTest1")); 5 6 //继续另一个任务 7 //ContinueWith返回一个新的Task引用 8 Task cwt = task.ContinueWith(t => Console.WriteLine(t.Result)); 9 //继续另一个任务 10 task.ContinueWith(t => Console.WriteLine("Complete")); 11 } 12 13 private static void StartChildTask() 14 { 15 //返回类型为string[]的Task 16 Task<string[]> parent = new Task<string[]>(() => 17 { 18 //创建一个数组来存储结果 19 string[] result = new string[3]; 20 21 //创建并启动3个子任务 22 //指定将任务附加到任务层次结构中的某个父级 23 new Task(() => result[0] = TaskTest("TaskTest0"), TaskCreationOptions.AttachedToParent).Start(); 24 new Task(() => result[1] = TaskTest("TaskTest1"), TaskCreationOptions.AttachedToParent).Start(); 25 new Task(() => result[2] = TaskTest("TaskTest2"), TaskCreationOptions.AttachedToParent).Start(); 26 27 //返回对数组的引用,即使数组元素可能还没有初始化 28 return result; 29 }); 30 31 //父任务及其子任务完成后,用一个延续任务显示结果 32 var cwt = parent.ContinueWith((parentTask) => Array.ForEach(parentTask.Result, Console.WriteLine)); 33 34 //启动父任务,以便于启动其子任务 35 parent.Start(); 36 } 37 38 private static string TaskTest(string str) 39 { 40 Console.WriteLine("TaskTest_" + str); 41 return str; 42 }