首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

NET 4.0 System.Threading.Tasks学习札记

2012-10-07 
NET 4.0 System.Threading.Tasks学习笔记由于工作上的需要,学习使用了System.Threading.Tasks的使用,特此

NET 4.0 System.Threading.Tasks学习笔记

由于工作上的需要,学习使用了System.Threading.Tasks的使用,特此笔记下来。
System.Threading.Tasks的作用:
Tasks命名空间下的类试图使用任务的概念来解决线程处理的复杂问题。任务(Task)包含一个操作,以及依赖哪个任务的完成才能开始。
测试用例:
假设有任务A,B,C,D。其中C依赖A和B的完成,而D依赖A的完成。代码该怎么写呢?
代码:

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->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()));

?

?

测试任务类:

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->?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”同时”执行的现象

热点排行