基于委托的异步回调

异步回调时在调用 BeginInvoke时提供的回调方法,主线程就不必再等待异步线程工作完毕,异步线程在工作结束后会主动调用提供的回调方法。

class Program

{

public delegate void PrintDelegate(string content);

static void Main(string[] args)

{

int threadId = Thread.CurrentThread.ManagedThreadId;

PrintDelegate printDelegate = new PrintDelegate(Print);

Console.WriteLine("[主线程id:{0}]\t开始调用打印的方法...", threadId);

IAsyncResult result = printDelegate.BeginInvoke("Hello Word!", PrintComplete,printDelegate);

Thread.Sleep(1000);

Console.ReadLine();

}

public static void Print(string content)

{

int threadId = Thread.CurrentThread.ManagedThreadId;

Console.WriteLine("[当前线程id:{0}]\t{1}",threadId,content);

Thread.Sleep(1000);

}

private static void PrintComplete(IAsyncResult asyResult)

{

if (null == asyResult)

{

throw new ArgumentException();

}

int threadId = Thread.CurrentThread.ManagedThreadId;

(asyResult.AsyncState as PrintDelegate).EndInvoke(asyResult);

Console.WriteLine("[当前线程id:{0}]\t打印方法调用完毕。", threadId);

}

}

时间: 2024-11-08 19:22:14

基于委托的异步回调的相关文章

基于委托的异步编程实现

神麽是异步调用 在主线程中异步调用的方法不在主线程中执行,而是在另一个辅助线程中与主线程代码并行执行.给出一段示例代码: 当我们调用UploadPictureAsync方法时,图片尚未上传完成,我们就可以在控制台输出提示信息:"图片开始上传". /// <summary> /// 异步上传图片 /// </summary> /// <param name="fileLocalPath"></param> public

深入理解yield(三):yield与基于Tornado的异步回调

转自:http://beginman.cn/python/2015/04/06/yield-via-Tornado/ 作者:BeginMan 版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接. 发表于 2015-04-06 在深入理解yield(二):yield与协程 和深入理解yield(一):yield原理已经对yield原理及在python中的运用了解了很多,那么接下来就要结合Tornado,进行python异步的分析. 一.异步的实

带你一步步实现线程池异步回调

转载请注明出处 作者:晓渡文章地址:https://greatestrabit.github.io/2016/03/29/callback/ 1.字面意义上的回调 字面意思上理解回调,就是A调用B,B回过头来再调用A,即是回调.既然是这样,当然就要求A中有B,B中有A.如下: class A { /**  * 提出问题  * @author [email protected]  * @param b  * @param question  */ public void ask(final B b

C# 委托的三种调用示例(同步调用 异步调用 异步回调)

本文将主要通过同步调用.异步调用.异步回调三个示例来讲解在用委托执行同一个加法类的时候的的区别和利弊 首先,通过代码定义一个委托和下面三个示例将要调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Slee

C#委托调用(同步调用,异步调用,异步回调)

#region 委托回调 static void delegateTest() { Console.WriteLine("同步调用"); SubDelegate subDel = Sub; var result = subDel.Invoke(3, 4); Console.WriteLine("继续"); Console.WriteLine(result); Console.ReadKey(); Console.WriteLine("异步调用")

Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调

ylbtech-Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调 1.返回顶部 1. 下面为即将被调用的方法: public delegate int AddHandler(int a, int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.

MSDN搬运 之 [基于事件的异步模式]

基于事件的异步模式概述 那些同时执行多项任务.但仍能响应用户交互的应用程序通常需要实施一种使用多线程的设计方案.System.Threading 命名空间提供了创建高性能多线程应用程序所必需的所有工具,但要想有效地使用这些工具,需要有丰富的使用多线程软件工程的经验.对于相对简单的多线程应用程序,BackgroundWorker 组件提供了一个简单的解决方案.对于更复杂的异步应用程序,请考虑实现一个符合基于事件的异步模式的类. 基于事件的异步模式具有多线程应用程序的优点,同时隐匿了多线程设计中固有

实践基于Task的异步模式

Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueWith的方法实现的.基于语言的异步支持通过允许在正常控制流内部等待异步操作隐藏callbacks,具有和编译器生成的代码相同的API级别的支持. 在.Net 4.5,C#直接异步地支持等待的Task和Task<TResult>,在C#中使用"await"关键字.如果等待一个Ta

C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式

三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 BeginRead 和 EndRead 方法来从文件异步读取字节,它们是 Read 方法的异步版本 Begin 方法包含同步方法签名中的任何参数,此外还包含另外两个参数:一个AsyncCallback 委托和一个用户定义的状态对象.委托用