C# 同步调用、异步调用、异步回调

    public delegate int AddHandler(int a, int b);
    public class JiaFa
    {
        public static int Add(int a, int b)
        {
            Console.WriteLine("开始计算:" + a + "+" + b);
            Thread.Sleep(3000);
            Console.WriteLine("计算完成");
            return a + b;
        }
    }

同步调用

        static void Main1(string[] args)
        {
            //方式1
            AddHandler handler = new AddHandler(JiaFa.Add);
            var res = handler.Invoke(3, 5);
            Console.WriteLine("继续做其他事情");
            Console.WriteLine(res);
            //方式2
            //AddHandler handler2 = new AddHandler((int a, int b) =>
            //{
            //    Console.WriteLine("开始计算:" + a + "+" + b);
            //    Thread.Sleep(3000);
            //    Console.WriteLine("计算完成");
            //    return a + b;
            //});
            //Console.WriteLine(handler2(3, 5));
            Console.ReadKey();
        }

异步调用

        static void Main2(string[] args)
        {
            AddHandler handler = new AddHandler(JiaFa.Add);
            IAsyncResult result = handler.BeginInvoke(3, 5, null, null);
            Console.WriteLine("继续做其他事情1");
            //当主线程执行到EndInvoke时,如子线程还没有执行完,则主线程还是需要等待
            Console.WriteLine(handler.EndInvoke(result));
            Console.WriteLine("继续做其他事情2");
            Console.ReadKey();
        }

异步回调

        static void Main(string[] args)
        {
            AddHandler handler = new AddHandler(JiaFa.Add);
            IAsyncResult result = handler.BeginInvoke(3, 5, new AsyncCallback(Call), "AsycState:OK");
            Console.WriteLine("继续做其他事情");
            Console.ReadKey();
        }
        static void Call(IAsyncResult result)
        {
            AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate;
            Console.WriteLine(handler.EndInvoke(result));
            Console.WriteLine(result.AsyncState);
        }

原文地址:https://www.cnblogs.com/yinchh/p/10498770.html

时间: 2024-10-10 15:17:37

C# 同步调用、异步调用、异步回调的相关文章

java三种调用方式(同步调用/回调/异步调用)

1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口 ) 实例2:老师平时学生布置任务后不可能一直等待和监督学生完成,老师通常会告诉学生,任务完成后给他打个电话或者发个信息,那么学生给老师返回结果的过程需要老师信息,这就是一个回调的过程.

C# 委托的三种调用示例(同步调用 异步调用 异步回调)

本文将主要通过同步调用.异步调用.异步回调三个示例来讲解在用委托执行同一个加法类的时候的的区别和利弊 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Slee

C#委托调用(同步调用,异步调用,异步回调)

#region 委托回调 static void delegateTest() { Console.WriteLine("同步调用"); SubDelegate subDel = Sub; var result = subDel.Invoke(3, 4); Console.WriteLine("继续"); Console.WriteLine(result); Console.ReadKey(); Console.WriteLine("异步调用")

C# 同步调用 异步调用 异步回调 多线程的作用

同步调用   : 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. 异步调用  :同步调用会阻塞线程,如果是要调用一项繁重的工作(如大量IO操作),可能会让程序停顿很长时间,造成糟糕的用户体验,这时候异步调用就很有必要了.异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行.委托的异步调用通过BeginInvoke和EndInvoke来实现. 异步回调函数  :当异步调用时,主线程并没有等待,而是

C#(同步调用、异步调用、异步回调)

本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public delegate int AddHandler(int a,int b);    public class 加法类    {        public static int Add(int a, int b)        {            Console.WriteLine("开始计算:&quo

C#:同步调用、异步调用、异步回调

ylbtech-C#:同步调用.异步调用.异步回调 1.返回顶部 1. 本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public delegate int AddHandler(int a,int b);    public class 加法类    {        public static int Add(int a, int b)        {    

Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调

ylbtech-Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调 1.返回顶部 1. 下面为即将被调用的方法: public delegate int AddHandler(int a, int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.

同步调用和异步调用同时存在导致的混乱

其实在Promise之外也存在这个问题,这里我们以一般的使用情况来考虑此问题.这个问题的本质是接收回调函数的函数,会根据具体的执行情况,可以选择是以同步还是异步的方式对回调函数进行调用.下面我们以 onReady(fn) 为例进行说明,这个函数会接收一个回调函数进行处理. mixed-onready.js function onReady(fn) { var readyState = document.readyState; if (readyState == 'interactive' ||

C#同步和异步调用

这篇文章仅当总结之用,参考了很多前辈们的文章,加上了点点自己的理解 C#的同步和异步线程是依靠委托来完成,主要需要用到委托的Invoke方法,BeginInvoke和EndInvoke方法 所谓同步线就是阻塞当前线程来完成调用的方法,然后才继续调用当前线程的后面的操作,实际上都是在同一个线程中执行,效率不高.需要用到Invoke方法 异步线程不阻塞当前线程,而是把需要调用的方法加入线程池中,来同步执行,即同一时间两个及其以上的线程共同都在执行,效率很高.需要用到BeginInvoke和EndIn