zoukankan      html  css  js  c++  java
  • 异步多线程2

    同步单线程与异步多线程:

     2..NetFramework的几种线程的迭代

    3.Task方式的多线程应用

    private void btnTask_Click(object sender, EventArgs e)
            {
                Console.WriteLine("多个Task异步线程启动   start {0}", Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("这里是一些同步线程方法1");
                Console.WriteLine("这里是一些同步线程方法2");
                Console.WriteLine("这里是一些同步线程方法3");
                Console.WriteLine("这里是一些同步线程方法4");
                Console.WriteLine("这里是一些同步线程方法5");
                Console.WriteLine("这里是一些同步线程方法6");
    
                //分析场景,线程应用范围,有严格时间限制和先后顺序的只能单线程
                //多线程执行任务可以提升效率, 因为这些任务可以并发执行
                //多线程不能优化不可分割的任务
                List<Task> taskList = new List<Task>();
                taskList.Add(Task.Run(() => { this.CodingProcess("Manuel", "coding"); }));
                taskList.Add(Task.Run(() => { this.CodingProcess("Wellers", "writing"); }));
                taskList.Add(Task.Run(() => { this.CodingProcess("April", "eating"); }));
                taskList.Add(Task.Run(() => { this.CodingProcess("Moon", "cooking"); }));
                taskList.Add(Task.Run(() => { this.CodingProcess("MX", "cleaning"); }));
    
    
                #region 使用TaskFactory不阻塞主线程
    
                TaskFactory taskFactory = new TaskFactory();
                //等待全部任务完成后,启动一个新的task来完成后续动作
                taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(),
                    tArray =>
                    {
                        Console.WriteLine($"项目完成,请贡献,部署联调测试 {Thread.CurrentThread.ManagedThreadId}");
                    }));//将这个线程也加入线程list,控制它在主线程执行前执行
    
                #endregion
    
                #region 等待异步线程执行结束后继续执行
    
                //            Task.Run(() =>//意味着方法体被新线程执行,不会卡界面,
                //            {//但不推荐,1.尽量不要线程套线程 2.全部由子线程完成
    
    
                Task.WaitAny(taskList.ToArray()); //阻塞当前线程,直到任一任务结束
                Console.WriteLine("项目进行到里程碑,支付20%费用");
    
                //既需要多线程来提升性能,又需要在多线程全部完成后才能执行的操作
                Task.WaitAll(taskList.ToArray()); //会阻塞当前线程,知道全部任务结束---主线程被阻塞了
                Console.WriteLine("项目验收完毕,支付费用");
                Console.WriteLine("多个Task异步线程启动   end {0}", Thread.CurrentThread.ManagedThreadId);
    
    
                //            });
    
                #endregion
    
            }

    1

  • 相关阅读:
    第三章 系统总线
    人工神经网络及其应用
    专家系统
    遗传算法
    搜索算法策略
    js判断有无属性及新添属性
    vue 文件插件 Vetur 设置说明官网
    vue 获得当前无素并做相应处理
    VUE style 绑定
    vue入门基础知识点测试
  • 原文地址:https://www.cnblogs.com/Manuel/p/13426696.html
Copyright © 2011-2022 走看看