• 创建线程(Background Thread)的N种方式


    第一、Thread类

      Thread类是实例化线程的主要方法;一个Thread实例管理一个线程,即执行序列。通过简单实例化一个对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。

      

    Thread thread = new Thread(_ => BackgroundMethod("第一、Thread类创建线程"));
                thread.Start();
                thread.Join();

    第二、ThreadPool(线程池)类

      提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。

    ThreadPool.QueueUserWorkItem(_ => BackgroundMethod("第二、ThreadPool创建线程"));

    第三、delegate(委托)

      委托异步回调方法创建线程,只需调用BeginInvoke委托和触发线程。然后,调用EndInvoke将阻塞当前线程。

      

    BackgroundMethodDelegate x = new BackgroundMethodDelegate(BackgroundMethod);
                IAsyncResult a = x.BeginInvoke("第三、delegate委托", null, null);
                x.EndInvoke(a);

    第四、BackgroundWorker类

      在单独线程上执行操作

      

    BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += delegate { BackgroundMethod("第四、BackGroundWorker创建线程"); };
                worker.RunWorkerAsync();

    第五、System.Threading.Timer

      创建一个计时器,提供以指定时间间隔执行方法机制。

    Timer timer = new System.Threading.Timer(_ => BackgroundMethod("第五、Timer计时器"), null, 0, Timeout.Infinite);

    第六、Task类

      最简单的任务异步操作

      

    using (Task task = new Task(() => BackgroundMethod("第六、Task类创建异步任务")))
                {
                    task.Start();
                    task.Wait();
                }

    第七、Task.Factory(Task另外一种创建方式)

      创建实例工厂的访问

    Task.Factory.StartNew(() => BackgroundMethod("第七、Task第二种创建异步方式"));

    第八、Parallel类

       System.Threading.Tasks命名空间下的,提供对并行循环和区域支持

    Parallel.Invoke(() => BackgroundMethod("第八、Parallel类"));

    第九、System.Reactive.Linq.Observable

      Reactive Extensions 概要

      Reactive Extensions (下面简称 Rx) 是在 Linq 可操作的数据源上针对 "异步"(BeginXXX/EndXXX) 和 "事件"(XXXCompleted) 上的扩展,也可以被称为 "Linq To Asynchronous" 和 " Linq To Events"。相比以前复杂的异步处理或者事件处理,Timer的处理等,结合Linq 形式的Rx编程模型更加简洁。

      关于 Rx 的安装,可以通过 Reactive Extensions (Rx) 的主页 的直接下载安装,当然也可以利用 NuGet 导入 dll (http://nuget.org/packages/Rx-Main) [译注: NuGet 是VS集成的在线 dll部署工具,非常方便]。Rx 不管是 Installer 还是 NuGet 安装的,都有 Stable(稳定版) 和 Experimental(实验版) 两种。

      

    Observable.Return("第九、Observable类", Scheduler.Default).Subscribe(BackgroundMethod);

    第十、ProcessStartInfo类

      指定启动进程时使用的一组值,严格上应该不处于创建线程这一栏,但已被建议作为一种方式在后台做一些事情,即使它没有资格作为一个后台线程。 (根据定义,一个后台线程是进程中的一个线程不会防止进程终止,而它仍然在运行。 )

    ProcessStartInfo startInfo = new ProcessStartInfo("StartThreads.exe", "OutOfProcess");
                startInfo.CreateNoWindow = false;
                startInfo.UseShellExecute = false;
                startInfo.RedirectStandardOutput = true;
                Process process = Process.Start(startInfo);
                Console.WriteLine(“第十:ProcessStartInfo”);
                process.WaitForExit();

     测试源码地址:http://files.cnblogs.com/xchit/StartThreads.rar

  • 相关阅读:
    从零打造树莓派智能助手(一)——让树莓派说话
    以np.concatenate为主题,谈谈numpy数组按维度合并的问题
    树莓派apt报错:E: 'Release' 这个值对 APT::Default-Release 是无效的,因为在源里找不到这样的发行
    我遇到的一些Git问题汇编
    在Mac平台用Sublime编辑器使用Git并连接github
    LeetCode108——Convert Sorted Array to Binary Search Tree
    LeetCode122——Best Time to Buy and Sell Stock II
    LeetCode686——Repeated String Match
    Python爬虫 — 百度翻译
    HTTP 协议
  • 原文地址:https://www.cnblogs.com/xchit/p/3425542.html
Copyright © 2020-2023  润新知