C# 异步同步调用

using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace BasicFunctionStudy
{
    public class AsyncOperation
    {
        public static void Run()
        {
            Console.WriteLine("===== 同步调用 SyncInvokeTest =====");
            AddHandler handler = new AddHandler(OperationClass.Add);
            int result = handler.Invoke(1, 2);
            Console.WriteLine("继续做别的事情。。。");
            Console.WriteLine ("----------------------------");
            Console.WriteLine("===== 异步调用 AsyncInvokeTest =====");
            AddHandler handler2 = new AddHandler(OperationClass.Add);
            //IAsyncResult: 异步操作接口(interface)
            //BeginInvoke: 委托(delegate)的一个异步方法的开始
            IAsyncResult result2 = handler2.BeginInvoke(1, 2, null, null);
            Console.WriteLine("继续做别的事情。。。");
            //异步操作返回
            Console.WriteLine(handler2.EndInvoke(result2));
            Console.WriteLine ("----------------------------");
            Console.WriteLine("===== 异步调用 AsyncInvokeTest =====");
            Action<int, int> action = (a, b) => OperationClass.Add(a, b);
            action.BeginInvoke (1, 2, ar => action.EndInvoke (ar), null);
            Console.WriteLine("继续做别的事情。。。");
            Console.WriteLine ("----------------------------");
            Console.WriteLine("===== 异步回调 AsyncInvokeTest =====");
            AddHandler handler3 = new AddHandler(OperationClass.Add);
            //异步操作接口(注意BeginInvoke方法的不同!)
            IAsyncResult result3 = handler3.BeginInvoke(1,2,new AsyncCallback((ar) => {
                //result 是“加法类.Add()方法”的返回值
                //AsyncResult 是IAsyncResult接口的一个实现类,空间:System.Runtime.Remoting.Messaging
                //AsyncDelegate 属性可以强制转换为用户定义的委托的实际类。
                AddHandler handler4 = (AddHandler)((AsyncResult)ar).AsyncDelegate;
                Console.WriteLine(handler4.EndInvoke(ar));
                Console.WriteLine(ar.AsyncState);
            }),"AsycState:OK");
            Console.WriteLine("继续做别的事情。。。");
        }
    }
    public delegate int AddHandler(int a,int b);
    public class OperationClass
    {
        public static int Add(int a, int b)
        {
            Console.WriteLine("开始计算:" + a + "+" + b);
            Thread.Sleep(3000); //模拟该方法运行三秒
            Console.WriteLine("计算完成!");
            return a + b;
        }
    }
}


知识共享许可协议
《C# 异步同步调用》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     165.84ms