c# 异步线程

using System;
using System.Collections.Generic;
using System.Runtime.Remoting.Messaging;
using System.Threading;

namespace asyncResult
{
    delegate long myDel(int first,int second);

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main begin");
            IAsyncResult iar =  new myDel(Sum).BeginInvoke(3, 5, CallBackAsyn, null);
            Console.WriteLine("Doing more work in Main");
            Thread.Sleep(500);
            Console.WriteLine("Done with Main Exiting");

        }

        static long Sum(int first, int second)
        {
            Console.WriteLine("delete method Begin");
            Thread.Sleep(100);
            return first + second;
        }

        //怎么确保回调函数是由哪个异步线程发起的? 
        //这就是为什么需要用IAsyncResult接口的原因,IAsyncResult接口对象在AsyncResult 类对象内部,AsyncResult包含委托对象引用
        static void CallBackAsyn(IAsyncResult iar)
        {
            Console.WriteLine("CallBackFn asyncResult Begin");
            AsyncResult ar = (AsyncResult)iar;
            myDel del = (myDel)ar.AsyncDelegate;
            Console.WriteLine("CallBackFn asyncResult result is:{0}",del.EndInvoke(iar));
        }
    }
}

原文地址:https://www.cnblogs.com/y112102/p/3068209.html