怎么在C#项目中实现异步调用-创新互联
今天就跟大家聊聊有关怎么在C#项目中实现异步调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

具体内容如下
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace AsyncAppTest
{
////异步调用示例详解
/// 第1步:定义委托;此委托的返回值、参数类型必须与要调用的异步方法一致;
///
public delegate Task 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 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#项目中实现异步调用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联网站建设公司行业资讯频道,感谢大家的支持。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:怎么在C#项目中实现异步调用-创新互联
分享路径:http://www.jxjierui.cn/article/dsccpd.html


咨询
建站咨询
