zoukankan      html  css  js  c++  java
  • 关于委托和线程

    关于委托和线程

    无意间看到一个奇葩的解释,说委托的本质的就是多线程,这......

    委托本质就是一个函数的指针而已,和线程完全是不同的概念;如果非要扯上点关系,就是同步委托和异步委托。同步委托就是占用主线程同步执行,异步委托肯定是开启新的线程去执行委托指向的函数。多播委托其实也是一样的,无非就是绑定了多个函数的指针,依次执行而已。

    同步调用Invoke

    异步调用BeginInvoke

    1. BeginInvoke 是基于ThreadPool中的线程实现异步的,不像是控件的BeginInvoke方法总是使用UI线程。
    2. IAsyncResult 可用于检测异步调用的过程。
    3. AsyncCallback 该委托用于指定在异步操作完成后回调函数。
    class Program
    {
        //创建函数
        private static int newTask(int ms)
        {
            Console.WriteLine("任务开始");
            Thread.Sleep(ms);
            Random random = new Random();
            int n = random.Next(10000);
            Console.WriteLine("任务完成");
            return n;
        }
    
        delegate int DelTask(int ms);
        static void Main(string[] args)
        {
            DelTask dt = newTask;
            //第一个参数是调用work方法的参数,第二个是回调函数,第三个是需要传到回调函数里的参数可以是Object类型            
            dt.BeginInvoke(2000, ar =>
            {
                //IAsyncResult result = ar.AsyncState as IAsyncResult;               
    
                var t = ar.AsyncState.ToString();
    
                Console.WriteLine(t);
    
            }, "string参数");
    
            Console.ReadKey();
        }
    }
  • 相关阅读:
    重启sqlserver服务命令
    k8s学习
    collection包1.1.0都升级了什么功能
    Golang项目的测试实践
    一个让业务开发效率提高10倍的golang库
    GopherChina第二天小结
    GopherChina第一天小结
    slice是什么时候决定要扩张?
    史上最快的后台搭建框架
    gorm的日志模块源码解析
  • 原文地址:https://www.cnblogs.com/tianboblog/p/9061645.html
Copyright © 2011-2022 走看看