namespace ConsoleApplication22
{
/// /// 异步操作 /// /// /// ///
//internal Func<int,int,int> int MainRun(int data, int sleep); internal class Program
{
private static void Main(string[] args)
{
Func<int,int,int> mainRun = TakeAWhile;
var ar = mainRun.BeginInvoke(, , null, null);
while (!ar.IsCompleted)
{
Console.WriteLine(".");
Thread.Sleep();
}
int result = mainRun.EndInvoke(ar);
Console.WriteLine("Result :{0}", result);
Console.ReadLine();
} private static int TakeAWhile(int data, int sleep)
{
Console.WriteLine("TakesAWhile stated");
Thread.Sleep(sleep);
Console.WriteLine("TakesAWhile completed");
return ++data;
}
}
}
namespace AsyncDelegateDemo
{
delegate String AsyncFooDelegate(int i,int sleep);
class Program
{
/// <summary>
/// 输出当前线程的信息
/// </summary>
/// <param name="name">方法名称</param> static void PrintCurrThreadInfo(string name)
{
Console.WriteLine(name+ " is: " + Thread.CurrentThread.ManagedThreadId+ ", current "
+ (Thread.CurrentThread.IsThreadPoolThread ? "YES" : "NO "));
} /// <summary>
/// 测试方法,Sleep一定时间
/// </summary>
/// <param name="i">Sleep的时间</param>
/// <param name="sleep"></param>
static string Foo(int i,int sleep)
{
PrintCurrThreadInfo("Foo()");
Thread.Sleep(i);
return i.ToString();
} /// <summary>
/// 投递一个异步调用
/// </summary>
static void PostAsync(int i)
{
AsyncFooDelegate caller = Foo;
caller.BeginInvoke(i,1000, FooCallBack, caller);
} static void Main2(string[] args)
{
PrintCurrThreadInfo("Main()");
for(int i = 0; i < 10 ; i++)
{
PostAsync(i);
}
Console.ReadLine();
} static void FooCallBack(IAsyncResult ar)
{
AsyncFooDelegate caller = (AsyncFooDelegate) ar.AsyncState;
var index = caller.EndInvoke(ar);
PrintCurrThreadInfo("FooCallBack()="+index);
}
}
}

C# Delegate 异步调用的更多相关文章

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

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

  2. 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一

    在C++中有2种类型的线程:UI Thread和Worker Thread,前者是基于用户界面的有消息循环的线程.后者是没有用户界面的侧重于大时空运算的线程.直接调用Windows相关线程及同步对象的 ...

  3. C#委托异步调用

    参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...

  4. .Net组件程序设计之异步调用

    .Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...

  5. 谈谈RPC中的异步调用设计

    RPC(远过程调用)在分布式系统中是很常用的基础通讯手段,核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处 ...

  6. C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)

           我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...

  7. C#异步调用的方法

    最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用异步调用的好处,随便将自己找 ...

  8. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  9. WCF 异步调用问题

    添加引用时生成"勾选允许生成异步操作" Wcf异步调用三种方式: 第一种:直接调用异步方法 var serviceClient = new MyServiceClient(); s ...

随机推荐

  1. HW4.18

    public class Solution { public static void main(String[] args) { System.out.println("Graph 1&qu ...

  2. Web开发,如何从小工到专家

    最近在研读关于“整体性学习”的一些东西,收获颇丰. 整体性学习强调的东西有三样:结构.模型.与高速通道.特别是关于结构的篇章: 理解是什么?理解就是结构高度发达完善的结果. 是不是有些学科你可以轻松“ ...

  3. 用Gitosis搭建Git服务器(经典资料)

    该文档介绍了用Gitosis自己搭建Git服务器,文章来自于<Git权威指南>一书的第31章,讲述详细易懂易操作,是搭建Git服务器绝好资料! 下载地址:http://download.c ...

  4. tty、pty、pts等(小记)

    http://blog.csdn.net/dbzhang800/article/details/6939742 1> tty(终端设备的统称):tty一词源于Teletypes,或者telety ...

  5. 字符串匹配算法-BM

    在用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广泛的一种算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法.比我们学习的KMP算 ...

  6. 第二次装OA系统

    第二次安装:1.解压之后再MYOA目录下 找到一键安装.bat2.安装之后,一闪而过.(电脑上不需要apache,也不需要 mysql)3.192.168.1.111(自己电脑IP)看是否可以,若不可 ...

  7. 史上最全的iOS各种设备信息获取总结

    来源:si1ence 链接:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述一下各种信息 ...

  8. Eclipse下安装/配置Jrebel6.X

    Eclipse3.6+下安装/配置Jrebel6.X 1. 为什么要使用Jrebel 在日常开发过程中, 一旦修改配置/在类中增加静态变量/增加方法/修改方法名等情况, tomcat不会自动加载, 需 ...

  9. RedHat7搭建Nginx+Apache+PHP

    Nginx做为前端服务器(本机IP:192.168.136.104),将访问PHP页面的动态请求转发给Apache服务器(只监听本地回环地址172.0.0.1:80) 安装Apache# yum -y ...

  10. python 面向对象深入理解

    面向过程 函数式编程 面向对象编程:面向对象是由类和对象组成,只要用类和对象实现的,就是面向对象编程 def  Bar():     print  "This is  Bar " ...