//闲来无事,巩固同步异步方面的知识,以备后用,特整理如下:

  class Program
{
static void Main(string[] args)
{ //同步调用 会阻塞当前线程,一步一步进行调用
Console.WriteLine("============同步调用线程:" + Thread.CurrentThread.ManagedThreadId+"============");
AddHandler _handler01 = AddMethod.Add;
int _result01 = _handler01(1, 2);
Console.WriteLine("继续做别的事情。。。");
Console.WriteLine("同步调用结果:"+_result01); Console.WriteLine();
//异步调用 不会阻塞当前线程,会放到线程池里
//异步调用通过BeginInvoke和EndInvoke来实现(成对应用)。
Console.WriteLine("============异步调用线程:" + Thread.CurrentThread.ManagedThreadId + "============");
AddHandler _handler02 = AddMethod.Add;
IAsyncResult _result02 = _handler02.BeginInvoke(3, 8, null, null);
Console.WriteLine("继续做别的事情。。。");
Console.WriteLine("异步调用结果:"+_handler02.EndInvoke(_result02)); Console.WriteLine();
//用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。
//BeginInvoke最后一个参数@object传递额外的参数
Console.WriteLine("============异步回调 线程:" + Thread.CurrentThread.ManagedThreadId + "============");
AddHandler _handler03 = AddMethod.Add;
IAsyncResult _result03 = null;
_result03 = _handler03.BeginInvoke(9, 8, (IAsyncResult _ia) => { Console.WriteLine("异步回调结果:"+_handler03.EndInvoke(_result03)); }, null); Console.WriteLine("继续做别的事情。。。");
Console.ReadKey(); }
} public delegate int AddHandler(int _a,int _b);
public class AddMethod
{
public static int Add(int _a, int _b)
{
Console.WriteLine("开始计算:" + _a + "+" + _b);
Thread.Sleep(3000);
Console.WriteLine("计算完成! 线程:"+Thread.CurrentThread.ManagedThreadId);
return _a + _b;
}
}
}

//运行结果,如图:

整理自:http://blog.csdn.net/wanlong360599336/article/details/8781477

整理 C#(同步调用、异步调用、异步回调)的更多相关文章

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

    Review: 原作者虽然使用了汉字的类名,看起来十分蹩脚,但是,还是把同步调用.异步调用.异步回调的使用讲解的很详细的.原理讲解的很清晰. ------ 本文将主要通过“同步调用”.“异步调用”.“ ...

  2. 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)

    下面为即将被调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(i ...

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

    1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消息或事件的机制 ...

  4. C#“同步调用”、“异步调用”、“异步回调”

    本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...

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

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b);    public class ...

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

    本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public dele ...

  7. java常见的几种调用机制(同步调用,异步调用,回调)

    1.同步调用 同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走. 代码如下: public class A {public ...

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

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { p ...

  9. c#异步线程:同步调用,异步调用,异步回调

    定义一个异步线程类: public class AsyEventClass { private static ILog logger = LogManager.GetLogger(MethodBase ...

随机推荐

  1. Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用

               yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指 ...

  2. C# 解析json Newtonsoft.Json

    Newtonsoft.Json.dll public class ErrorInfo { public error_response error_response { get; set; } } pu ...

  3. JQuery日历插件My97DatePicker日期范围限制

    My97DatePicker是一个非常优秀的日历插件,不仅支持多种调用模式,还支持日期范围限制. 常规的调用比较简单,如下所示: 1 <input class="Wdate" ...

  4. DEDE栏目内容调用

    {dede:sql sql='Select content from dede_arctype where id=1'} [field:content/] {/dede:sql},

  5. IOS 解析歌词lrc

    最近在捣鼓音乐播放器,过程中学到了一些东西,写下来分享一下,首先是歌词的解析 首先我们看看lrc(不贴维基了怕打不开 歌词文件一般是这样的格式 1.[分钟:秒.毫秒] 歌词 2. [分钟:秒] 歌词 ...

  6. get top k elements of the same key in hive

    key points: 1. group by key and sort by using distribute by and sort by. 2. get top k elements by a ...

  7. PowerShell String对象方法 1

    PowerShell String对象方法 1 8 6月, 2013  在 Powershell tagged 字符串 / 对象 / 文本 by Mooser Lee 从之前的章节中,我们知道Powe ...

  8. cf437A The Child and Homework

    A. The Child and Homework time limit per test 1 second memory limit per test 256 megabytes input sta ...

  9. c语言函数定义、函数声明、函数调用以及extern跨文件的变量引用

    1.如果没有定义,只有声明和调用:编译时会报连接错误.undefined reference to `func_in_a'2.如果没有声明,只有定义和调用:编译时一般会报警告,极少数情况下不会报警告. ...

  10. Bootstrap--本地安装使用

    1.到官网下载:http://v2.bootcss.com 2.下载后是一个压缩文件,把它放在相应的工作目录下,然后解压. 3.新建一个测试文件,然后导入两个文件.