代码改变世界

异步多线程案例

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;
        }
    }