委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。
同步调用的例子:
复制代码 代码如下:
using System;
using System.Threading;
public delegate int AddHandler(int a, int b);
public class Foo {
static void Main() {
Console.WriteLine("**********SyncInvokeTest**************");
AddHandler handler = new AddHandler(Add);
int result = handler.Invoke(1,2);
Console.WriteLine("Do other work... ... ...");
Console.WriteLine(result);
Console.ReadLine();
}
static int Add(int a, int b) {
Console.WriteLine("Computing "+a+" + "+b+" ...");
Thread.Sleep(3000);
Console.WriteLine("Computing Complete.");
return a+b;
}
}运行结果:
**********SyncInvokeTest**************
Computing 1 + 2 ...
Computing Complete.
Do other work... ... ...
同步调用会阻塞线程,如果是要调用一项繁重的工作(如大量IO操作),可能会让程序停顿很长时间,造成糟糕
的用户体验,这时候异步调用就很有必要了。
异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行。
委托的异步调用通过BeginInvoke和EndInvoke来实现。
异步调用:
复制代码 代码如下:
using System;
using System.Threading;
public delegate int AddHandler(int a, int b);
public class Foo {
static void Main() {
Console.WriteLine("**********AsyncInvokeTest**************");
AddHandler handler = new AddHandler(Add);
IAsyncResult result = handler.BeginInvoke(1,2,null,null);
Console.WriteLine("Do other work... ... ...");
Console.WriteLine(handler.EndInvoke(result));
Console.ReadLine();
}
static int Add(int a, int b) {
Console.WriteLine("Computing "+a+" + "+b+" ...");
Thread.Sleep(3000);
Console.WriteLine("Computing Complete.");
return a+b;
}
}运行结果: **********AsyncInvokeTest**************
Do other work... ... ...
Computing 1 + 2 ...
Computing Complete.
可以看到,主线程并没有等待,而是直接向下运行了。
但是问题依然存在,当主线程运行到EndInvoke时,如果这时调用没有结束(这种情况很可能出现),这时为了等待调用结果,线程依旧会被阻塞。
解决的办法是用回调函数,当调用结束时会自动调用回调函数
回调异步:
复制代码 代码如下:
public class Foo {
static void Main() {
Console.WriteLine("**********AsyncInvokeTest**************");
AddHandler handler = new AddHandler(Add);
IAsyncResult result = handler.BeginInvoke(1,2,new AsyncCallback(AddComplete),"AsycState:OK");
Console.WriteLine("Do other work... ... ...");
Console.ReadLine();
}
static int Add(int a, int b) {
Console.WriteLine("Computing "+a+" + "+b+" ...");
Thread.Sleep(3000);
Console.WriteLine("Computing Complete.");
return a+b;
}
static void AddComplete(IAsyncResult result) {
AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate;
Console.WriteLine(handler.EndInvoke(result));
Console.WriteLine(result.AsyncState);
}
}
相关推荐:
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
二次创作的魅力与潜力:创意无限的数字时代,天长外贸网站建设
什么是seo寄生虫,寄生虫seo原理 ,AI 疫
SEO与SEM:谁才是提升网站流量的王者?,Ai中字体如何变形立体
seo追词是什么,seo词条 ,52580609AI
优化型网站:提升企业竞争力的必备利器,重庆网站推广工作如何
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
乘风SEO-引领企业互联网时代的腾飞之路,南昌b站关键词排名优化贵不贵
AI撰写率:让创作变得更高效,助力内容产业腾飞,人力ai
ChatGPT40不收费版本:科技革新,智能助手助力生活与工作,ai医疗武器有哪些
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
SEO中的别类词:提升排名,轻松超越竞争对手,ai插画生肖
文章续写AI:提升写作效率,创意无限
SEO代做:让你的企业轻松登顶搜索引擎,快速提升曝光率,seo 提高注册量
ChatGPT:OpenAI的创新之作-一款颠覆传统的语言模型,ai球衣号
SEO考核:如何通过精准的SEO优化提升网站排名与流量,茶艺营销推广方案怎么写
seo规范是什么意思,seo包括哪些内容 ,AI智能破解
怎样利用AI写文章,轻松提升写作效率
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
文章自动生成AI:助力写作新时代,让创作更高效
SEO超级,助力企业站点冲刺搜索引擎排名,白云全网营销推广哪家强
ChatGPT免费订阅的使用限制:其潜力与挑战,ai辅助线无法对齐画板
ChatGPT5.0为什么一直没出来?背后的技术与战略,元宵节ai趣赏月
2025年整站SEO排名优化策略:让你的网站脱颖而出,id排版ai
AI免费写文章:让创作变得轻松高效
为什么说seo这么重要,seo重要吗 ,ai19920403
如何用AI写公众号文章?让创作更高效、更轻松
ChatGPT无法访问原因分析及解决方案,斑马ai报道
ChatGPTO1免费:突破智能聊天的极限,体验AI无限可能,糯米ai唱歌
SEO快速排名实例:如何通过实战技巧提升网站排名,快速突破流量瓶颈,安徽ai跑步机企业
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班
二创AI:打破创意壁垒,引领未来内容创作新潮流,背影教案网站建设游戏
ChatGPT:引领智能对话新潮流,助力未来科技,ai写作免费议论文
seo营销方法是什么,seo营销模式 ,ai山海
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
文章创作AI:引领智能写作的新时代
seo需要学习什么语言,做seo需要懂什么技术 ,ai软件制作教程
seo网赚什么意思,网站seo赚钱 ,ai打不开ai
SEO总计:如何通过SEO优化实现网站流量和排名的飞跃,三元桥网站优化
内容创作新时代:自动生成文章的AI如何改变写作生态
SEO自行:提升网站流量的秘密武器,邹平县个人网站建设建议
WPJVX:开启数字化未来的智慧平台,关键词排名技术咨询乐云seo
SEO经营:助力企业腾飞的秘密武器,靖边百度关键词排名
什么是亚马逊seo策略,亚马逊的seo推广是什么 ,天天学术ai写作优惠券
ChatGPT怎么打不开了?解决办法,轻松恢复畅通无阻!,ai订酒店ai对话
“关键词指白”:揭秘如何通过精准关键词优化实现流量暴增,全面分析网站seo
ChatGPT故障:科技背后的秘密与应对策略,华为什么手机带ai功能
seo组建需要什么条件,seo建站的步骤 ,ai肌肉宝宝
AI智能工具的无限可能:未来已来,你准备好了吗?