Fork me on GitHub

关于委托和线程

关于委托和线程

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

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

同步调用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();
    }
}
posted @ 2018-05-19 21:07  迁梦余光  阅读(1454)  评论(0编辑  收藏  举报