本文实例为大家分享了C#异步调用的具体代码,供大家参考,具体内容如下
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Threading.Tasks; namespace AsyncAppTest { ////异步调用示例详解 /// 第1步:定义委托;此委托的返回值、参数类型必须与要调用的异步方法一致; /// public delegate Task<string> AsyncSendMail(string rece, string copyer, string subj, string body); class DelegateTest { //定义委托变量 AsyncSendMail sendMail = null; //异步方法的回调方法 //回调方法必须要有类型为 IAsyncResult的参数, //以获取开始异步 BeginInvoke的调用结果 void BackCall(IAsyncResult parameter) { //parameter.IsCompleted用于判断异步方法是否已调用完成; if(parameter.IsCompleted) { //通过EndInvoke方法获取异步方法的返回结果(类型与异步方法的结果一致) Task<string> message = sendMail.EndInvoke(parameter); Console.Write(string.Format("回调完成,返回值:{0}", message.Result)); } else { Console.Write("调用未完成"); } } public string AsyncSendMailHandler( string rece, string copyer, string sub, string body) { //WcfTest.MailServiceClient 是服务器上的Wcf服务,是本示例内要调用的异步方法 WcfTest.MailServiceClient sc = new WcfTest.MailServiceClient(); //将异步方法与委托关联 sendMail = new AsyncSendMail(sc.SendEmailAsync); string s = null; //以下BeginInvoke方法在调用时,先将 SendEmailAsync的参数传入,BackCall是回调方法,s在此处的作用未弄明白, //但参数中不可省略 // 异步是相对于委托实例所在线程的,本示例中是指sendMail与sc.MailServiceClient不是一个线程; sendMail.BeginInvoke(rece, copyer, sub, body, BackCall, s); return s; } } class Program { static void Main(string[] args) { DelegateTest test = new DelegateTest(); test.EventCompleteHandle("gqpeng@cmhit.com", null, "测试邮件", "测试邮件"); Console.Write("上面是异步开始调用"); Console.Read(); } } }
另:以下是Invoke与BeginInvoke的区别。
Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解C# Socket异步通信实例,包括了详解C# Socket异步通信实例的使用技巧和注意事项,需要的朋友参考一下 TCPServer 1、使用的通讯通道:socket 2、用到的基本功能: ①Bind, ②Listen, ③BeginAccept ④EndAccept ⑤BeginReceive ⑥EndReceive 3、函数参数说明 新建socket所使用的参数均为系统预
本文向大家介绍springboot实现异步调用@Async的示例,包括了springboot实现异步调用@Async的示例的使用技巧和注意事项,需要的朋友参考一下 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规的做法是使用多线程或线程池,需要额外
本文向大家介绍C#异步编程详解,包括了C#异步编程详解的使用技巧和注意事项,需要的朋友参考一下 前言 本节主要介绍异步编程中Task、Async和Await的基础知识。 什么是异步? 异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。 异步和多线程 相同点:避免调用线程阻塞,从而提高软件的可响应性。 不同点: 异步操作无须额外的线程负担,并且使用回
本文向大家介绍C#基础之异步调用实例教程,包括了C#基础之异步调用实例教程的使用技巧和注意事项,需要的朋友参考一下 本文实例形式展示了C#中异步调用的实现方法,并对其原理进行了较为深入的分析,现以教程的方式分享给大家供大家参考之用。具体如下: 首先我们来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务 小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务
我有一个用c#编写的AWS lambda函数。此函数负责调用5-6个API调用(Post请求)。 所有这些API调用都是相互独立的。 我不关心这些API调用的响应。 即使我不关心后续响应,每个API调用也需要大约5秒才能完成。 问题:我希望lambda函数在一秒钟内执行并响应。如何异步进行API调用,使lambda函数能够在我的时间限制内完成所有这些操作,而不必等待API调用的响应?理想情况下,我
本文向大家介绍详解java 三种调用机制(同步、回调、异步),包括了详解java 三种调用机制(同步、回调、异步)的使用技巧和注意事项,需要的朋友参考一下 1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口; 3:异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到