C# Delegate 异步调用
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 异步调用的更多相关文章
- 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
下面为即将被调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(i ...
- 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一
在C++中有2种类型的线程:UI Thread和Worker Thread,前者是基于用户界面的有消息循环的线程.后者是没有用户界面的侧重于大时空运算的线程.直接调用Windows相关线程及同步对象的 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- .Net组件程序设计之异步调用
.Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...
- 谈谈RPC中的异步调用设计
RPC(远过程调用)在分布式系统中是很常用的基础通讯手段,核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处 ...
- C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...
- C#异步调用的方法
最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用异步调用的好处,随便将自己找 ...
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- WCF 异步调用问题
添加引用时生成"勾选允许生成异步操作" Wcf异步调用三种方式: 第一种:直接调用异步方法 var serviceClient = new MyServiceClient(); s ...
随机推荐
- 搜索算法:深度优先搜索(DFS)
关于深搜的介绍,在网上有很多,不再赘述.主要以题目形式实例讲解. POJ - 1321 (http://poj.org/problem?id=1321) 题目大意:给出一个棋盘,棋子不能同行同列,求放 ...
- SecureCRT 实用配置
SecureCRT,是一款支持 SSH2.SSH1.Telnet.Telnet/SSH.Relogin.Serial.TAPI.RAW 等协议的终端仿真程序,最吸引我的是,SecureCRT 支持标签 ...
- 【转】【opencv】仿射变换
仿射变换 目标 在这个教程中你将学习到如何: 使用OpenCV函数 warpAffine 来实现一些简单的重映射. 使用OpenCV函数 getRotationMatrix2D 来获得一个 旋转矩阵 ...
- hdoj 1873 看病要排队【优先队列】
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- spring官方文档中文版
转 http://blog.csdn.net/tangtong1/article/details/51326887 spring官方文档:http://docs.spring.io/spring/do ...
- iOS OC开发代码规范
1.变量.类名.函数名 使用驼峰命名法 2.尽量使用完整的单词命名,尽量不采用 缩写单词 3.类名使用大写字母打头,前缀统一加上HH 例如:HHHomePageController 4.类的成员变量使 ...
- Unity EditorWindow 笔记
一:功能 1.实例化 //设置插件在菜单栏的位置 和快捷键 [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")] //实例化窗体 static ...
- windows修改mysql默认字符集不成功
今天下午弄了半天,终于把mysql的默认字符集弄成了, 按照网上的说法,什么修改mysql下面的my.ini文件,把参数设置成utf-8,我反复操作,结果都是不成功,后来我把mysql5.0卸载了,网 ...
- Bash判断文件是否存在
#!/bin/bash if [ -f filename ]; then echo 'file exist' else echo 'file not exist' fi
- Java使用jackson问题解决
Java使用jackson问题解决 >>>>>>>>>>>>>>>>>>>>&g ...