C# 异步编程 异步委托调用同步方法
2010-07-18 19:27
585 查看
同步化操作:
由前后紧接的组件或函数调用组成。一个同步化调用会阻塞整个进程直到这一个操作完成。异步化操作:
不会阻塞启动操作的调用线程。调用程序必须通过轮流检测、软件中的中断信号或只是明确地等待完成信号来发现调用的完成。.NET 为异步操作提供两种设计模式:
· 使用 IAsyncResult 对象的异步操作。· 使用事件的异步操作。
.NET的许多方面都支持异步编程功能,这些方面包括:
· 文件 IO、流 IO、套接字 IO。· 网络。
· 远程处理信道(HTTP、TCP)和代理。
· 使用 ASP.NET 创建的 XML Web services。
· ASP.NET Web 窗体。
· 使用 MessageQueue 类的消息队列。
异步委托提供以异步方式调用同步方法的能力。
• 当同步调用一个委托时,调用方法直接对当前线程调用目标方法。如果编译器支持异步委托,则它将生成该调用方法以及BeginInvoke 和EndInvoke 方法。• 如果调用BeginInvoke 方法,则公共语言运行库将对请求进行排队并立即返回到调用方。将对来自线程池的线程调用该目标方法。提交请求的原始线程自由地继续与目标方法并行执行,该目标方法是对线程池线程运行的
• 在回调中,使用EndInvoke 方法来获取返回值和输入/输出参数。如果没有对BeginInvoke 指定回调,则可以在提交请求的原始线程上使用EndInvoke。
using System; using System.Threading; using System.Runtime.Remoting.Messaging; namespace ClassMain { //委托声明(函数签名) delegate string MyMethodDelegate(); class MyClass { //要调用的动态方法 public string MyMethod1() { return "Hello Word1"; } //要调用的静态方法 public static string MyMethod2() { return "Hello Word2"; } } class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { MyClass myClass = new MyClass(); //方式1: 声明委托,调用MyMethod1 MyMethodDelegate d = new MyMethodDelegate(myClass.MyMethod1); string strEnd = d(); Console.WriteLine(strEnd); //方式2: 声明委托,调用MyMethod2 (使用AsyncResult对象调用) d = new MyMethodDelegate(MyClass.MyMethod2); //定义一个委托可以供多个方法使用 AsyncResult myResult; //此类封闭异步委托异步调用的结果,通过AsyncResult得到结果. myResult = (AsyncResult)d.BeginInvoke(null, null); //开始调用 while (!myResult.IsCompleted) //判断线程是否执行完成 { Console.WriteLine("正在异步执行MyMethod2 ....."); } Console.WriteLine("方法MyMethod2执行完成!"); strEnd = d.EndInvoke(myResult); //等待委托调用的方法完成,并返回结果 Console.WriteLine(strEnd); Console.Read(); } } }
相关文章推荐
- C#构建多线程应用程序(1) —— 使用委托来自动创建次线程以实现异步方法的调用
- C# 委托的同步调用和异步调用
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的同步调用和异步调用
- C#的新特性体验(异步方法的同步调用)
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的同步调用和异步调用
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C#使用异步方式调用同步方法
- C#委托的同步调用和异步调用介绍
- C#的新特性体验(异步方法的同步调用)
- C#同步和异步调用方法实例
- 20160711--C# 委托的三种调用示例(同步调用 异步调用 异步回调)【转载】
- C# 委托的同步调用和异步调用
- C# 委托的同步调用和异步调用
- 艾伟_转载:C# 委托的同步调用和异步调用
- C# 委托的同步调用和异步调用--抓住重点
- C# 委托的同步调用和异步调用
- dhl:C#异步方法调用(使用委托,在委托上调用BeginInvoke方法)
- C#~异步编程再续~async异步方法与同步方法的并行