• C#多线程技术(一)


    公司项目有可能采用C#编写,如果用到,必然会涉及到多线程技术,基本的概念都是相同的,差别是具体的代码。

    在C#中,线程函数执行被封装在类中,通过类对象的Start函数启动线程执行函数。线程类Thread接受的是一个ThreadStart的delegate类型对象,具体代码应该如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading;
     6 
     7 namespace MultiThreadTest
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Thread thread1 = new Thread(
    14                         delegate()
    15                         {
    16                             Console.WriteLine("Hello Here!");
    17                         }
    18                     );
    19             Thread thread2 = new Thread(
    20                     () =>            // lambda 表达式
    21                     {
    22                         Console.WriteLine("Well then goodbye!\n");
    23                     }
    24                 );
    25 
    26             thread1.Start();
    27             thread2.Start();
    28         }
    29     }
    30 }
    31 

     通常在多线程中,我们需要等待所有的线程都结束,系统才会等待运行退出。这个时候,可以调用线程对象的Join函数,该函数在线程达到尾部结束的时候,会进行线程返回。

    当线程个数很多的时候,不带参数的Join函数需要多次调用,非常费时费劲,这个时候,可以调用带时间参数的Join函数,当超过时间后,系统强制结束线程运行,如下面的代码:

    1             if ( !thread.Join(30000))
    2             {
    3                 thread.Abort();
    4             }

     之前处理的线程函数,都无法对数据状态进行保存处理,这样,对于复杂应用显然不是特别适合,C#的Thread采用ThreadStart委托方式,可以很好的解决这个问题:

    代码
     1     class ThreadedTask{
     2         string _whatToSay;
     3         public ThreadedTask(string whatToSay){
     4             _whatToSay = whatToSay;
     5         }
     6 
     7         public void MethodToRun(){
     8             Console.WriteLine("I am babbling ( " + _whatToSay + " )");
     9         }
    10     }
    11 
    12 
    13         ThreadedTask task = new ThreadedTask("hello");
    14 
    15         Thread thread = new Thread(
    16                             new ThreadStart(task.MethodToRun)
    17                         );
    18         thread.Start();

     字符串hello被存在类中,通过委托的方式将MethodToRun方法委托到线程内部,然后调用Start函数,这个时候,保存到类中的数据也可以被准确获取出来。


  • 相关阅读:
    Dbeaver: [PostgreSQL]在三个数据库中,仅在Dbeaver中显示一个数据库
    Power BI selection如何显示多选的结果 CONCATENATEX po
    POWER BI 根据条件,改变数值的颜色Conditional formatting po
    ASP.NET Web API 2 常用开发技术
    小程序开发之小试牛刀
    JavaScript 开发经验之谈
    WMI测试器
    【HTML】步骤进度条组件
    C 、汇编入门与逆向分析
    java执行shell脚本怎么进行交互处理
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1670789.html
Copyright © 2020-2023  润新知