上边的主线程会被卡住:

7个同时开发,谁先完成之后, 需要完成某个工作,可以用waitany

2: 不卡界面的做法

加上以上命令就不卡,是子线程做的事

   //Task task = taskFactory.StartNew(action);
Console.WriteLine("Eleven老师接到一个项目");
Console.WriteLine("沟通需求,谈妥价格");
Console.WriteLine("签合同,收取50%的费用");
Console.WriteLine("高级班筛选学员,组建团队");
Console.WriteLine("详细的需求分析、系统设计、模块划分、框架搭建");
Console.WriteLine("开始干活。。。");
Console.WriteLine(" "); List<Task> taskList = new List<Task>(); taskList.Add(taskFactory.StartNew(() => this.Coding("浑无痕", "Portal")));
taskList.Add(taskFactory.StartNew(() => this.Coding(" 菜鸟 ", "BackService")));
taskList.Add(taskFactory.StartNew(() => this.Coding("oldwork", "Client")));
taskList.Add(taskFactory.StartNew(() => this.Coding(" 米 ", "WeChatClient")));
taskList.Add(taskFactory.StartNew(() => this.Coding("走自己的路", " WCF ")));
taskList.Add(taskFactory.StartNew(() => this.Coding("滑猪小板", " DB ")));
taskList.Add(taskFactory.StartNew(() => this.Coding("Walden", "小程序"))); //都开发完成后,进行联调测试 不是我做的,是开发者 taskFactory.ContinueWhenAny(taskList.ToArray(),
t => Console.WriteLine("第一个完成的,获取红包奖励,{0}", Thread.CurrentThread.ManagedThreadId)); taskFactory.ContinueWhenAll(taskList.ToArray(),
tList => Console.WriteLine("都开发完成后,开始联调测试,{0}", Thread.CurrentThread.ManagedThreadId)); Task.WaitAny(taskList.ToArray());//等待任意一个任务的完成,会卡主当前的运行线程
Console.WriteLine("某个模块完成开发后,老师再收取20%的费用"); Task.WaitAll(taskList.ToArray());//等待全部任务的完成,会卡主当前的运行线程 Console.WriteLine("项目开发验收完成后,老师去收取全部的费用");
Console.WriteLine("老师给大家分钱。。。"); Console.WriteLine("******************btnTask_Click 异步方法 end {0}********************", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine();
} /// <summary>
/// Coding
/// </summary>
/// <param name="name"></param>
private void Coding(string name, string project)
{
Console.WriteLine("******************Coding start {0} {1} {2} {3}********************",
name, project, Thread.CurrentThread.ManagedThreadId.ToString(""), DateTime.Now.ToString("HHmmss:fff")); long lResult = ;
for (int i = ; i < ; i++)
{
lResult += i;
}
Thread.Sleep(); Console.WriteLine("******************Coding end {0} {1} {2} {3}********************",
name, project, Thread.CurrentThread.ManagedThreadId.ToString(""), DateTime.Now.ToString("HHmmss:fff"));
}

c#task list waitall task waitany的更多相关文章

  1. C# Task WaitAll和WaitAny

    Task 有静态方法WaitAll和WaitAny,主要用于等待其他Task完成后做一些事情,先看看其实现部分吧: public class Task : IThreadPoolWorkItem, I ...

  2. Task CancellationTokenSource和Task.WhenAll的应用

    Task是.net4.0推出的异步编程类,与ThreadPool.QueneUserWorkItem方法类似的是,Task也是使用线程池来工作的.但Task比起这个QueneUserWorkItem的 ...

  3. 第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。

    一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程.线程等待.线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的 ...

  4. 【.NET】- Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...

  5. C# Task 多任务 限制Task并发数量

    LimitedTaskScheduler: using System; using System.Collections.Concurrent; using System.Collections.Ge ...

  6. Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...

  7. Task.Run Vs Task.Factory.StartNew

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  8. Task.Run Vs Task.Factory.StartNew z

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  9. MapReduce作业的map task和reduce task调度参数

    MapReduce作业可以细分为map task和reduce task,而MRAppMaster又将map task和reduce task分为四种状态: 1.pending:刚启动但尚未向reso ...

随机推荐

  1. 学Android开发的人可以去的几个网站

    学Android开发的人可以去的几个网站 1.<IT蓝豹>Android开源项目分享平台国内非常好的一个Android开发者分享站,分享android所有特效,每天都有最新的Android ...

  2. jekins的一些配置

    GotPC_Excel_Branches丢弃旧的构建 svn http://devsvn.uuzuonline.com/GOT_PC_PRIVATE/config/trunk构建Execute she ...

  3. 深入理解hello world

    阅读目录 为什么所有东西都是从类开始的 为什么总是需要有一个“main”方法 HelloWorld的字节码 HelloWorld在JVM中是如何运行的 对于每个Java程序员来说,HelloWorld ...

  4. JIT物料在途未清PO作为供给

    以下是本应在TEMP中处理,目前是写到FP_CHECK_SAP_DATA中 ----JIT物料在途未清PO作为供给 add by landor on 20180809 INSERT INTO SAP_ ...

  5. web.xml中<security-constraint>和四种认证类型

    https://blog.csdn.net/lisheng19870305/article/details/40819481 sztc开发中http请求一直发送后无响应,通过soapui定位异常信息为 ...

  6. Django常用的模板标签

    django 目前了解的各个文件的作用: manage.py:  运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件:  通过 {{变量名}}接收变量 通过 模板标 ...

  7. c++面向过程和面向对象-C++编译器是如何管理类和对象的

    1,c++编译时如何区分对象调用类的方法? C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段(栈区内存)和代 ...

  8. pta l3-1(凑零钱)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054207279104 题意:给定n枚硬币的面值,需要支付 ...

  9. pta7-20 畅通工程之局部最小花费问题(Kruskal算法)

    题目链接:https://pintia.cn/problem-sets/15/problems/897 题意:给出n个城镇,然后给出n×(n-1)/2条边,即每两个城镇之间的边,包含起始点,终点,修建 ...

  10. JAVA jar 参数

    -client       to select the "client" VM    -server       to select the "server" ...