异步多线程案例
2022-02-25 14:18 Evan.Pei 阅读(30) 评论(0) 编辑 收藏 举报class Program { static void Main(string[] args) { Console.WriteLine($"Task 学习开始----{Thread.CurrentThread.ManagedThreadId}"); List<Task> ta1 = new List<Task>(); fun1(out ta1);//得到一个异步多线程集合 TaskFactory tf = new TaskFactory();//现场工厂 管理线程 //等集合中的线程执行完,在从线程池中拿一个线程执行新方法 tf.ContinueWhenAll(ta1.ToArray(), t => {Console.WriteLine($"Task 学习结束----{Thread.CurrentThread.ManagedThreadId}"); }); } public static void fun1(out List<Task> tlist) { List<Task> tasklist = new List<Task>(); //lamdba表达式直接写方法体 tasklist.Add(Task.Run(() => {Console.WriteLine($"======学习第1个线程======{Thread.CurrentThread.ManagedThreadId}"); })); tasklist.Add(Task.Run(() => {Console.WriteLine($"======学习第2个线程======{Thread.CurrentThread.ManagedThreadId}"); })); tasklist.Add(Task.Run(() => {Console.WriteLine($"======学习第3个线程======{Thread.CurrentThread.ManagedThreadId}"); })); tasklist.Add(Task.Run(() => { var result = fun2("hello!"); //调用有参数和返回值的方法 Console.WriteLine(result.ToString()); })); tlist = tasklist;//返回值 } //有参数的方法 public static string fun2(string a) { Console.WriteLine(a+"调用有参数返回值的方法!"+ Thread.CurrentThread.ManagedThreadId); return a; } }