运用场景:需要启动多条线程执行某些动作,并且收集这些线程的返回结果,通过这些线程的返回结果再执行一些动作。
思路:1. 为了更高效的执行,多条线程是并发的,或者说是同步的
2. 其中部分或全部线程有返回值,这部分返回值将汇总以后作为另一条线程的参数
3. 汇总数据的线程,需要等待多条线程全部执行完毕后,才能执行
于是,代码如下:
class Program
{
static void Main(string[] args)
{
Program p = new Program();
/* 任务A、B并发执行,并且带有返回值 */
Task<int> taskA = Task<int>.Factory.StartNew(() => { return p.PartA(); });
Task<int> taskB = Task<int>.Factory.StartNew(()=>p.PartB());
/* 等待两个任务完成后,才执行后续任务 */
Task[] tasks = { taskA, taskB };
Task.WaitAll(tasks);
/* 取两条任务的返回结果,做出处理 */
Task task = Task.Factory.StartNew(()=>{ Console.WriteLine(taskA.Result + taskB.Result); });
Console.ReadKey();
}
private int PartA()
{
Console.WriteLine("PartA start!");
Thread.Sleep(2000);
Console.WriteLine("PartA finished!");
return 500;
}
private int PartB()
{
Console.WriteLine("PartB start!");
Thread.Sleep(5000);
Console.WriteLine("PartB finished!");
return 1000;
}
}