由于工作上的需要,学习使用了System.Threading.Tasks的使用,特此笔记下来。
System.Threading.Tasks的作用:
Tasks命名空间下的类试图使用任务的概念来解决线程处理的复杂问题。任务(Task)包含一个操作,以及依赖哪个任务的完成才能开始。
测试用例:
假设有任务A,B,C,D。其中C依赖A和B的完成,而D依赖A的完成。代码该怎么写呢?
代码:
1 TaskFactory factory = new TaskFactory();
2 Task a = factory.StartNew((new TestAction("A", 2)).Do);
3 Task b = factory.StartNew((new TestAction("B", 5)).Do);
4 Task c = factory.ContinueWhenAll(new Task[] { a, b }, ((preTasks) => (new TestAction("C",1)).Do()));
5 Task d = factory.ContinueWhenAll(new Task[] { a }, ((preTasks) => (new TestAction("D",1)).Do()));
测试任务类:
1 public class TestAction
2 {
3 public TestAction(string actionName,int p)
4 {
5 _actionName = actionName;
6 _p = p;
7 }
8
9 private int _p;
10 private string _actionName;
11 public void Do()
12 {
13 Console.WriteLine("开始执行" + _actionName);
14 Thread.Sleep(new TimeSpan(0, 0, _p));
15 Console.WriteLine("执行完毕" + _actionName);
16 }
17 }
需要注意的是,StartNew方法将立即执行,并不会等待后续的任务加入后才开始,这个是让我刚开始学习时很困惑的。而且StartNew方法不是一个同步方法,这意味着将立即执行后面的语句,因此,我们也就模拟出了任务A和B”同时”执行的现象。
.NET 4.0 System.Threading.Tasks学习笔记的更多相关文章
-
Visual Studio 2015 Owin+MVC+WebAPI+ODataV4+EntityFrawork+Identity+Oauth2.0+AngularJS 1.x 学习笔记
2016年,.net 会有很多大更新 ASP.NET 5 在此之前我都是用着古老的.net做开发的 (WebForm + IIS) 为了接下来应对 .net 的新功能,我特地去学习了一下基本的 MVC ...
-
《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
-
HttpClient exception:ExceptionType:System.Threading.Tasks.TaskCanceledException: The operation was canceled. --->; System.IO.IOException: Unable to read data from the transport connection: Operation ca
error msg: System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System. ...
-
转载 Net多线程编程—System.Threading.Tasks.Parallel
.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...
-
System.Threading.Tasks.Task 引起的 IIS 应用池崩溃
接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activ ...
-
System.Threading.Tasks.Task引起的IIS应用程序池崩溃
问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0 ...
-
一、并行编程 - 数据并行 System.Threading.Tasks.Parallel 类
一.并行概念 1.并行编程 在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的.在TPL中,最基本的执行单元是task(中文可以理解为"任 ...
-
System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃
转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状 ...
-
System.Threading.Tasks并发和异步代码使用
main.cs System.Threading.Tasks.Parallel.For(0, 10, i => { TestLock test ...
随机推荐
-
GDUFE-OJ 1070上班打卡 ^位运算
Problem Description: 某公司上班使用打卡制度,员工需要在打卡机器上打入和打出才算上班.每个员工都有自己对应编号K,编号为一个整数(1 <= K <=50000),某天有 ...
-
TypeScript 素描 - 泛型、枚举
/* 泛型,好处多多的功能.不过这里最基本的就不打算说了,仅准备说一些 和C#不同的地方 */ /* 泛型接口 GenericIdentityFn 定义了方法的描述等 identity方法则是它的实现 ...
- iOS边练边学--菜单悬停效果的实现思路
-
input, textarea,监听输入事件
IE使用'propertychange'事件监听,其它浏览器使用'input'事件测试了IE7-10, Chrome, FF, 输入没有问题.♥但在IE9下, 删除, 回退, Ctrl+X 没有 ...
-
VMware安装CentOS 6.7系统
VMware安装CentOS 6.7系统 1. 安装前的准备 a) VMware虚拟机软件 b) CentOS 6.7镜像 c) Windows电脑一台 2. 开始安装 a) 打开VMware软件 b ...
-
springboot全局捕获异常
捕获 捕获原理,使用AOP技术,采用异常通知. 1.捕获返回json格式 2.捕获返回页面 步骤: 1.@ControllerAdvice(pasePackage="") 注释异常 ...
-
Day6:html和css
Day6:html和css 复习 margin: 0; padding: 0; <!DOCTYPE html> <html lang="en"> <h ...
-
JSONPath介绍
1. JSONPath介绍 官网地址: https://github.com/alibaba/fastjson/wiki/JSONPath fastjson 1.2.0之后的版本支持JSONPath. ...
-
HyperLedger/Fabric JAVA-SDK with 1.1
HyperLedger/Fabric JAVA-SDK with 1.1 该项目可直接在github*问. 该项目介绍如何使用fabric-sdk-java框架,基于fabric-sdk-java ...
-
SpringBoot使用AutoConfiguration自定义Starter
https://segmentfault.com/a/1190000011433487