同步异步执行委托

C#同步执行委托

namespace SyncDelegate
{
    delegate int BinaryOp(int a, int b);
    class Program
    {
        static void Main(string[] args)
        {
            //打印出正在执行的线程ID。
            Console.WriteLine("Main() Invoke:" + Thread.CurrentThread.ManagedThreadId);
            Console.Write("请输入i值:");
            int i = int.Parse(Console.ReadLine());
            Console.Write("请输入j值:");
            int j = int.Parse(Console.ReadLine());
            
            //调用地址()以同步的方式。
            BinaryOp b = new BinaryOp(Add);

            //也可以写b.Invoke(10, 10);
            int num=  b(i,j);

            Console.WriteLine(i + "+" + j + "=" +num);
            Console.ReadKey();
        }

        static int Add(int a, int b)
        {
            Console.WriteLine("Add() Invoke:" + Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(500);
            return a + b;
        }
    }
}

 

 

C#异步执行委托

namespace AsyncDelegate
{
    public delegate int BinaryOp(int a ,int b);
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main()Invoke:"+Thread.CurrentThread.ManagedThreadId);
            BinaryOp bin = new BinaryOp(Add);
            //BeginInvoke 异步调用委托
            IAsyncResult Iasync = bin.BeginInvoke(4,5,new AsyncCallback(AddComplete),"Main()感谢你提供这些参数!");
           
            //担任其他工作是在这里
            Console.ReadLine();
        }

        //异步调用委托之后会执行下面过程,可以取出异步调用委托返回值
        public static void AddComplete(IAsyncResult result)
        {
            Console.WriteLine("AddComplete()Invoke:"+Thread.CurrentThread.ManagedThreadId);
            //现在得到的结果。
            AsyncResult ar = (AsyncResult)result;
            BinaryOp b = (BinaryOp)ar.AsyncDelegate;
            //用BeginInvoke 取得返回值
            int num = b.EndInvoke(result);
            Console.WriteLine("x+y="+ num);
            //信息检索的对象,它转换为字符串
            string msg = result.AsyncState.ToString();
            Console.WriteLine(msg);
        }

        //地区代表的BinaryOp目标
        public static int Add(int x,int y)
        {
            Console.WriteLine("Add() invoke:"+Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(500);
            return x + y;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值