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. CentOS搭建GIT服务器【一】-仓库搭建以及基于gitosis的SSH方式访问

    1.安装GIT核心 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel gcc g ...

  2. 机器学习笔记1——Introduction

    Introduction What is Machine Learning? Two definitions of Machine Learning are offered. Arthur Samue ...

  3. HDU 4635 多校第四场 1004 强联通

    我还有什么好说,还有什么好说...... 我是SBSBSBSBSBSBSBSBSBSBSBSBBSBSBSBSBSBSBSBSBS........................ 题意 思路什么的都不 ...

  4. SDWebImage原理小结

    先贴上github上的地址:https://github.com/rs/SDWebImage,至于安装方式这里就不多说了,它的框架说明中都有,不过建议使用cocoaPod来安装比较好,方便日后的维护代 ...

  5. View,viewgroup,viewstub总结

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  6. Araxis Merge Professional v2014.4565 特别版 | 文件比较合并

    http://www.ttrar.com/html/AraxisMerge.html Araxis Merge 是一个可视化的文件比较.合并和同步的软件,能够方便的被软件工程师和 web 站点开发者使 ...

  7. C++中this指针的使用方法.

    this指针仅仅能在一个类的成员函数中调用,它表示当前对象的地址.以下是一个样例: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 thi ...

  8. shell 脚本执行日志通用模块

    目标 实现记录SHELL执行的開始时间,结束时间.执行状态,错误信息等,以函数封装日志记录的方式,脚本调用函数 源代码 通用函数脚本program_log_new.sh function init_l ...

  9. poj 3140 Contestants Division(树形dp? dfs计数+枚举)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  10. 3行3列表格 table实现,div+css实现

    table实现: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...