整理 C#(同步调用、异步调用、异步回调)
//闲来无事,巩固同步异步方面的知识,以备后用,特整理如下:
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#(同步调用、异步调用、异步回调)的更多相关文章
- C#(同步调用、异步调用、异步回调)
Review: 原作者虽然使用了汉字的类名,看起来十分蹩脚,但是,还是把同步调用.异步调用.异步回调的使用讲解的很详细的.原理讲解的很清晰. ------ 本文将主要通过“同步调用”.“异步调用”.“ ...
- 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
下面为即将被调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(i ...
- java三种调用方式(同步调用/回调/异步调用)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消息或事件的机制 ...
- C#“同步调用”、“异步调用”、“异步回调”
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b); public class ...
- C# 同步调用、异步调用、异步回调
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public dele ...
- java常见的几种调用机制(同步调用,异步调用,回调)
1.同步调用 同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走. 代码如下: public class A {public ...
- C# 委托的三种调用示例(同步调用、异步调用、异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { p ...
- c#异步线程:同步调用,异步调用,异步回调
定义一个异步线程类: public class AsyEventClass { private static ILog logger = LogManager.GetLogger(MethodBase ...
随机推荐
- 对于js原型和原型链继承的简单理解(第二种,对象冒充)
关键代码 this.parent = Cat; this.parent.apply(this); function Cat(){ this.climb = function(){ aler ...
- Python 使用for代替in判断一个元素属于某个集合
string1 = raw_input("输入in之前的字符:")string2 = raw_input("输入in之后的字符:")x = ''if len(s ...
- struct tm->time() localtime() gmtime()
struct tm->time() localtime() gmtime() struct tm { int tm_sec; /*代表目前秒数,正常范围为0-59,但允许至61秒 */ int ...
- ios开发之常用宏的定义
有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操 ...
- MVC4 路由参数带点 文件名后缀导致错误
错误描述 最近在研究office在线预览,用到mvc4 apicontroller 需要传参是文件名,如test.docx导致错误"指定的目录或文件在 Web 服务器上不存在", ...
- SalutJs
SalutJs 前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着 ...
- WCF-IIS-PDA
PDA调用WCF 一 IIS托管WCF 项目从开始是用IIS托管的WCF,但一直出错,到最后也没有搞定,希望哪位大神知道的话可以指点. 错误如下: There was no endpoint list ...
- Unity3D中的工具类
1.时间:Unity提供了Time类,这个类主要用来获取当前的系统时间. Time.time:从游戏开始后开始计时,表示截止目前共运行的游戏时间. Time.deltaTime:获取Update()方 ...
- RFID电子标签加工的倒装工艺
倒装对于半导体封装领域的人员而言,是再熟悉不过的了.一般我们看到的集成电路多数以塑封为主,半导体芯片和外界进行信息沟通的通道,靠的就是集成电路的管脚.如果把集成电路外面的封装去掉,会发现每个集成电路内 ...
- qt实现头像上传功能(写了4个类,朝十晚八的博客,非常好)
想必大家都使用过qt的自定义头像功能吧,那么图1应该不会陌生,本片文章我就是要模拟一个这样的功能,虽然没有这么强大的效果,但是能够满足一定的需求. 图1 qq上传图片 首先在讲解功能之前,我先给出一片 ...