其他分享
首页 > 其他分享> > TaskFactory的简单使用

TaskFactory的简单使用

作者:互联网

上代码:

目前有方法Coding:

private void Coding(string name)
{
Console.WriteLine($"Coding开始");

Thread.Sleep(3000);
Console.WriteLine($"参数:{name},本次线程ID是{Thread.CurrentThread.ManagedThreadId.ToString("00")}");
Console.WriteLine($"Coding结束");
}
执行代码:

TaskFactory taskFactory = new TaskFactory();
List<Task> taskList = new List<Task>();
taskList.Add(taskFactory.StartNew(() => this.Coding("参数1")));
taskList.Add(taskFactory.StartNew(() => this.Coding("参数2")));
taskList.Add(taskFactory.StartNew(() => this.Coding("参数3")));
taskList.Add(taskFactory.StartNew(() => this.Coding("参数4")));
taskList.Add(taskFactory.StartNew(() => this.Coding("参数5")));

//当taskList中执行完任意一个任务时,非阻塞式的回调
taskFactory.ContinueWhenAny(taskList.ToArray(), t =>
{
Console.WriteLine($"有一个任务执行完成");
});

//当taskList中执行完所有任务时,非阻塞式的回调
taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), rArray =>
{
Console.WriteLine($"所有任务执行完成");
}));
执行结果:

 

 

 

关键代码说明:

taskFactory.ContinueWhenAny:当taskList中执行完任意一个任务时,执行本方法中的回调方法,非阻塞式的回调;

taskFactory.ContinueWhenAll:当taskList中执行完所有任务时,执行本方法中的回调方法,非阻塞式的回调

注:ContinueWhenAny ContinueWhenAll 非阻塞式的回调;而且使用的线程可能是新线程,也可能是刚完成任务的线程,唯一不可能是主线程

另外,除了这两个非阻塞式回调,还有两个相同作用的阻塞式回调,分别是Task.WaitAny和Task.WaitAll

标签:taskList,简单,Coding,阻塞,Add,taskFactory,使用,TaskFactory,回调
来源: https://www.cnblogs.com/jxxlz/p/15192324.html