.net 4.0新增性能----Task

来源:互联网 发布:淘宝直通车如何操作 编辑:程序博客网 时间:2024/06/05 12:49

一:Task

1. 最简单的使用

  开启task有两种方式:

<1> 实例化Task

    var task1 = new Task(() =>
         {
             StartAdd();
        });

  task1.Start();


 public static void StartAdd()
        {
            string value = null;
            for (int i = 0; i < 1000; i++)
            {
                td.TryAdd(i, i.ToString());
            }
            for (int i = 0; i < 1000; i++)
            {
                td.TryGetValue(i, out value);
                Console.WriteLine(value);
            }
        }

<2>从工厂中创建

Task.Factory.StartNew(() => Console.WriteLine("1"));

var task2 = Task.Factory.StartNew(() =>
             {
                 StartAdd();
            });


Task的waitAny和waitAll方法

  var tasks = new Task[3];
            for (int i = 0; i < tasks.Length; i++)
            {
                int taskIndex = i;
                tasks[i] = Task.Factory.StartNew(() =>
                {
                    int seed = Guid.NewGuid().GetHashCode();
                    int waitTime = new Random(seed).Next(10, 100);
                    Thread.Sleep(waitTime);
                    Console.WriteLine("Task{0} Finished", taskIndex);
                });
            }
            Task.WaitAny(tasks);
            Console.WriteLine("Here is one job finish");


取消一个Task

创建一个取消的Task一般要进行下面一些步骤:

a.创建System.Threading.CancellationTokenSource的一个实例:

b.通过CancellationTokenSource.Token属性获得一个System.Threading.CancellationToken:

c.创建一个新的Task或者Task<T>,并且在构造函数传入Action或者Action<object>的委托作为第一个参数,传入CancellationToken作为第二个参数:

 var cancelTokenSource = new CancellationTokenSource();


            Task.Factory.StartNew(() =>
            {
                while (!cancelTokenSource.IsCancellationRequested)
                {
                    Console.WriteLine(DateTime.Now);
                    Thread.Sleep(1000);
                }
            }, cancelTokenSource.Token);


            Console.WriteLine("Press any key to cancel");
            Console.ReadLine();
            cancelTokenSource.Cancel();
            Console.WriteLine("Done");
            Console.ReadLine();



0 0