zoukankan      html  css  js  c++  java
  • C# Task任务教程

    Task

    Task的背后的实现也是使用了线程池线程,但它的性能优于ThreadPoll,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。但是相对前面的两种耗内存,Task依赖于CPU对于多核的CPU性能远超前两者,单核的CPU三者的性能没什么差别。

    创建一个task也有3种方式来操作,Task.Factory.StartNew()Task run()new Task(), 前面2种是一样的,不需要用start来开始执行,后面一种需要start来执行的。

     Task t = Task.Run(() =>
     {
      //下面 的代码线性运行
        this.Invoke((EventHandler)(delegate
        {
        }  
    }
    Task t = Task.Factory.StartNew( () => {
                                      // Just loop.
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= 1000000; ctr++)
                                      {}
                                      Console.WriteLine("Finished {0} loop iterations",
                                                        ctr);
                                   } );
    var task1 = new Task(() =>
             {
                Console.WriteLine("Task 1 Begin");
                System.Threading.Thread.Sleep(2000);
                Console.WriteLine("Task 1 Finish");
             });
     task1.Start();

    取消任务的话,需要一个CancellationTokenSourcetoken来取消即可

    var tokenSource = new CancellationTokenSource();
    var token = tokenSource.Token;
    var task = Task.Factory.StartNew(() =>
             {
                for (var i = 0; i < 1000; i++)
                {
                   System.Threading.Thread.Sleep(1000);
                   if (token.IsCancellationRequested)
                   {
                      Console.WriteLine("Abort mission success!");
                      return;
                   }
                }
             }, token);
    tokenSource.Cancel();
  • 相关阅读:
    WPF 本地化语言设置
    WPF 调节树状图滚动条值
    WPF中ListBox的使用注意事项
    SQL 树状结构表中查出所所有父级/子级
    Vue创建
    wpf 控件注意事项
    链表习题(1)-设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点
    排序-快速排序
    排序-堆排序
    图-图的遍历
  • 原文地址:https://www.cnblogs.com/bingxing/p/15497006.html
Copyright © 2011-2022 走看看