zoukankan      html  css  js  c++  java
  • C#多线程与多任务

    此处介绍了多线程和多任务简单使用:

    1、多线程 Thread,可传入参数

    调用:

    string id = "123456";
    string name = "qt";
    var data = new Data { Id = id,Name = name };
    Thread t = new Thread(MainThreadWithParam);
    t.Start(data);  // 传入参数

    参数封装:

    public struct Data
    {
        public string Id;
        public string Name;
    }

    执行业务方法:

    private object mylock = new object();//异步锁,防止多个线程调用同一个方法,应对该方法不支持并发操作的情况
    
    // 定义线程方法:
    private void MainThreadWithParam(object o)
    {
        Monitor.Enter(this.mylock);//启用异步锁
        Data d = (Data)o;  //类型转换
        Console.WriteLine("Running in a thread, received {0}-{1}", d.Id,d.Name);
        string id = d.Id;
        string name = d.Name;
        //用户逻辑代码 --todo
    
        Monitor.Exit(this.mylock);//关闭异步锁
    }

     2、多任务  Task

    ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:
      ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作;
      ◆ ThreadPool不支持线程执行的先后次序;
      以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task。Task在线程池的基础上进行了优化,并提供了更多的API。在FCL4.0中,如果我们要编写多线程程序,Task显然已经优于传统的方式。

    调用:

    string id = "123456";
    var tokenSource = new CancellationTokenSource();
    var token = tokenSource.Token;
    token.Register(() =>
    {
        Console.WriteLine("task任务取消");
    });
    var task = Task.Factory.StartNew(() =>
    {
        Console.WriteLine("执行task任务");
        //执行多任务方法
        MainTaskWithParam(id, tokenSource);
    }, token);

    业务方法:

    private void MainTaskWithParam(string id, CancellationTokenSource tokenSource) 
    {
        //业务逻辑代码 --todo
    
        tokenSource.Cancel();//取消任务
    }

    总结: 实践是检验真理的唯一标准。

    参考:https://www.cnblogs.com/zhaoshujie/p/11082753.html

  • 相关阅读:
    iOS 数据存储
    iOS 中@property() 括号中,可以填写的属性?
    iOS 中关闭键盘方法
    iBeacons 资源汇总
    iOS7 下去掉状态栏(全屏)
    监听器HttpSessionListener
    监听器 HttpSessionBindingListener
    servlet 3.0 的使用
    工厂模式小例子 getDaoImp
    servlet和filter初始化
  • 原文地址:https://www.cnblogs.com/qiantao/p/15615027.html
Copyright © 2011-2022 走看看