整理 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_day2
1)<script src="dsad.js"> 不是 scr= 2)
- Dede文章列表
文章列表标签的使用: {dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen='' imgwidth='' imgheig ...
- symfony 从request中获取当前登陆用户
$usernameToken = unserialize($request->getSession()->get('_security_main')); $user = $username ...
- IE6 png 透明 (三种解决方法)(转来的哦)
FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 ====================================================== ...
- Lintcode--005(最长公共子序列)
Given two strings, find the longest common subsequence (LCS). 最长公共子序列 Your code should return th ...
- Express4+Mongodb极简入门实例
一.准备工作: 1.启动mongodb:bin目录下运行 2.在test数据库里插入一条数据: 二.正式开始: 1.通过应用生成器工具 express 快速创建一个应用的骨架,参考Express中文网 ...
- 通过JCONSOLE监控TOMCAT的JVM使用情况
这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL“: http://blog.163.com/kangle0925@126/blog/static/277581982011527723 ...
- 这样就算会了PHP么?-6
关于PHP与WEB表单交互的CASE,十多年前没拾起来啊. 下一步进入JS与PHP的交互... <form name="form1" method="post&qu ...
- HTTP发送请求模拟
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.I ...
- Struts2标签库之iterator
传说中的第一种方式,这种在Struts2.1权威指南的例子中也木有说明白: <%@ page language="java" contentType="text/h ...