zoukankan      html  css  js  c++  java
  • .NET 4.0 System.Threading.Tasks学习笔记

    由于工作上的需要,学习使用了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(00, _p)); 
    15     Console.WriteLine("执行完毕" + _actionName); 
    16 
    17 

    需要注意的是,StartNew方法将立即执行,并不会等待后续的任务加入后才开始,这个是让我刚开始学习时很困惑的。而且StartNew方法不是一个同步方法,这意味着将立即执行后面的语句,因此,我们也就模拟出了任务A和B”同时”执行的现象。

  • 相关阅读:
    【Unity3D】使用MD5值,确保本地Sqlite数据库内容没有被篡改
    《Unity3D》通过对象池模式,管理场景中的元素
    NGUI制作 《九宫格》 图片
    NGUI混合FingerGesture《卷二》分离触摸事件
    js的各种获取大小
    sass基础
    js面向对象开发基础
    正则表达式(进阶篇)
    正则表达式(基础篇)
    jquery源码学习(三)—— jquery.prototype主要属性和方法
  • 原文地址:https://www.cnblogs.com/tansm/p/TaskTest.html
Copyright © 2011-2022 走看看