当前位置: 首页 > news >正文

闻喜网站建设营销型网站建设优化建站

闻喜网站建设,营销型网站建设优化建站,农业公司网站建设,丰台网站关键词优化本文将介绍C#异步委托的三种实现方式,并给出相关示例代码及解析。 注意事项 用委托开启线程的前提是:创建项目时必须选择“.NET Framework",如果选择的是”.Net Core“,在调用BeginInvoke时,系统会报错”Operati…
  • 本文将介绍C#异步委托的三种实现方式,并给出相关示例代码及解析。

注意事项

    1. 用委托开启线程的前提是:创建项目时必须选择“.NET Framework",如果选择的是”.Net Core“,在调用BeginInvoke时,系统会报错”Operation is not supported on this platform.“。
    1. 异步调用的另一个前提是:委托的方法列表中只能包含一个方法。

等待至完成

  • 通过BeginInvoke和EndInvoke实现。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace FrameworkDemo
{public delegate long MyDel(int a, int b);class Program{static long sum(int a, int b) {Thread.Sleep(10 * 1000);return a + b;}static void Main(string[] args){// 异步委托操作描述IAsyncResult res = null;long result = 0;AsyncCallback callback = ar =>{// 输出结果:“计算结果为:11”Console.WriteLine($"{ar.AsyncState}{result}");};MyDel del = new MyDel(sum);// BeginInvoke开启异步调用// res的打印结果为System.Runtime.Remoting.Messaging.AsyncResultres = del.BeginInvoke(3, 8, callback, "计算结果为");  // 等待线程结束,并获取返回值result = del.EndInvoke(res);Console.ReadLine();}}
}
  • BeginInvoke函数的最后两个参数分别是一个回调函数,以及传入这个回调函数的参数。当委托线程运行结束后,会自动运行这个回调函数。之前的参数个数及类型取决于定义委托时参数的类型和个数。
  • IAsyncResult类型表示对异步委托操作的描述,一调用异步委托,就立刻会在主函数中得到这个返回值,打印结果为“System.Runtime.Remoting.Messaging.AsyncResult”。
  • EndInvoke会把主线程卡主,知道异步委托方法结束,此时将之前拿到的异步委托操作描述作为参数传入,即可获得异步委托函数的真正返回值。

轮询模式

  • 通过IsCompleted实现。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace FrameworkDemo
{public delegate long MyDel(int a, int b);class Program{static long sum(int a, int b) {Thread.Sleep(10 * 1000);return a + b;}static void Main(string[] args){// 异步委托操作描述IAsyncResult res = null;long result = 0;AsyncCallback callback = ar =>{// 输出结果:“计算结果为:11”Console.WriteLine($"{ar.AsyncState}{result}");};MyDel del = new MyDel(sum);// BeginInvoke开启异步调用// res的打印结果为System.Runtime.Remoting.Messaging.AsyncResultres = del.BeginInvoke(3, 8, callback, "计算结果为");while (!res.IsCompleted) {/*一系列想要的操作*/}// 等待线程结束,并获取返回值result = del.EndInvoke(res);Console.ReadLine();}}
}
  • 之前我们调用BeginInvoke后,直接调用EndInvoke,这使得主线程一直卡主,直到委托线程返回,通过IsComplated进行轮询线程状态,我们可以在循环中利用等待时间,执行一些别的想要的工作。

回调

  • 关于回调函数,比较标准的写法如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace FrameworkDemo
{public delegate long MyDel(int a, int b);class Program{static long sum(int a, int b) {Thread.Sleep(10 * 1000);return a + b;}// 异步委托执行完成后需要调用的回调函数static void testCallback(IAsyncResult ar) {System.Runtime.Remoting.Messaging.AsyncResult varResult =(System.Runtime.Remoting.Messaging.AsyncResult)ar;MyDel test = (MyDel)varResult.AsyncDelegate;long result = test.EndInvoke(ar);Console.WriteLine($"{ar.AsyncState}: {result}");}static void Main(string[] args){           MyDel del = new MyDel(sum);AsyncCallback asyncTest = new AsyncCallback(testCallback);del.BeginInvoke(3, 8, asyncTest, "计算结果为");Console.ReadLine();}}
}
  • 当异步委托运行结束后,系统会自动调用回调函数,并将异步委托描述信息IAsyncResult作为参数传入回到函数中,因此我们需要做的就是解析异步委托描述信息。
http://www.ds6.com.cn/news/112335.html

相关文章:

  • asp企业网站模版网页制作模板
  • 大型的营销型网站建设百度网址大全电脑版旧版本
  • 看设计案例的有哪些网站推广策略及推广方式
  • 昆山高端网站设计公司免费建站网站大全
  • 中央人民政府网电话seo网址大全
  • 做网站必须要有服务器吗seo推广服务哪家好
  • 手机做简单的网站网络营销活动方案
  • 网加商学院网站怎么做网站建设解决方案
  • 济南专门做网站的公司南京seo排名公司
  • 卢湾网站设计站长之家网站模板
  • 邢台提供网站建设公司报价百度推广运营工作是什么
  • 像芥末堆做内容的网站关键词优化怎么操作
  • 柳州网站建站费用成都百度百科
  • 开发一个app需要多少资金广东知名seo推广多少钱
  • 导航网站是怎么做的seo推广要多少钱
  • 网站开发业务ppt关键词规划师工具
  • 网站开发 页面功能布局网络推广的平台
  • 茶道网站开发背景重庆百度推广seo
  • 室内装修设计软件用哪个好seo新站如何快速排名
  • 在货源网站自己拿样 加盟 做代理 哪个比较好?seo入门书籍
  • 有做网站赚钱的吗南京网站设计公司
  • 嘉兴网站推广排名优秀营销软文范例100字
  • 中装建设官网北京百度seo排名
  • 扁平化中文网站模板下载行业关键词分类
  • 上海专业网站建设网网站推广和优化的原因网络营销
  • 织梦移动端网站建设软件发布网
  • 北京商地网站建设公司苏州百度 seo
  • 空间设计师工资一般多少seo专业培训课程
  • 网站建设來选宙斯站长游戏推广怎么做引流
  • 3合一网站怎么做百度小说风云榜排名