• Task


    .net 4.0为我们带来了TPL(Task Parallel Library),其中Task相较ThreadPool线程池使用更简单,而且支持线程的取消,完成和失败通知等交互性操作,而这些是ThreadPool所没有的。并且Task是可以有返回值的。

    传参

    给异步方法传参,可以使用以下几种方法。

      1 new Thread(Go1).Start("arg1");//最原始的传参
      2             new Thread(delegate() //使用匿名委托传参
      3                 {
      4                     Go1("arg1");
      5                 }).Start();
      6             new Thread(() => //使用lambda表达式
      7                 {
      8                     Go1("arg1");
      9                 }).Start();
    View Code

    可以有返回值

    Thread和ThreadPool都不能有返回值,但Task是可以有返回值的。

      1 var result = Task.Factory.StartNew<string>(() =>
      2             {
      3                 return Go1("arg1");
      4             });
    View Code

    Demo

    上代码。

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading;
      6 using System.Threading.Tasks;
      7 
      8 namespace AsyncCoding
      9 {
     10     class Program
     11     {
     12         static void Main(string[] args)
     13         {
     14             Task.Factory.StartNew(() => //Task默认创建的都是后台线程
     15             {
     16                 Go1("arg1");
     17             });
     18 
     19             Console.WriteLine("我是主线程,Thread Id:{0}", Thread.CurrentThread.ManagedThreadId);
     20             Console.ReadKey();
     21         }
     22 
     23         public static void Go1(string input)
     24         {
     25             Console.WriteLine("我是异步线程,Thread Id:{0},是否为后台线程:{1}, 传入参数为:{2}", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsBackground, input);
     26             for (int i = 0; i < 10; i++)
     27             {
     28                 Thread.Sleep(100);//模拟每次执行需要100ms
     29                 Console.WriteLine("异步线程,Thread Id:{0},运行:{1}", Thread.CurrentThread.ManagedThreadId, i);
     30             }
     31         }
     32     }
     33 }
     34 
    View Code

    代码执行顺序图解。

    2016-07-08_173957

    运行结果如下图。

    image

  • 相关阅读:
    安装mysql警告 warning: mysql-community-server-5.7.19-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    RPM方式安装MySQL5.6
    CentOS7安装MySQL冲突和问题解决小结
    Linux(64) 下 Tomcat + java 环境搭建
    自写Jquery插件 Combobox
    自写Jquery插件 Datagrid
    自写Jquery插件 Menu
    scrapy 中间件
    提高scrapy爬取效率配置
    scrapy基于请求传参实现深度爬取
  • 原文地址:https://www.cnblogs.com/mcgrady/p/5654186.html
Copyright © 2020-2023  润新知