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

宜昌网站开发肇庆百度快速排名

宜昌网站开发,肇庆百度快速排名,网站建设制作设计seo优化湖北,dw手机销售网站制作【.NET Core】深入理解异步编程模型(APM) 文章目录 【.NET Core】深入理解异步编程模型(APM)一、APM概述二、IAsyncResult接口2.1 BeginInvoke2.2 EndInvoke2.3 IAsyncResult属性2.4 IAsyncResult异步演示 三、通过结束异步操作来…

【.NET Core】深入理解异步编程模型(APM)

文章目录

  • 【.NET Core】深入理解异步编程模型(APM)
    • 一、APM概述
    • 二、IAsyncResult接口
      • 2.1 BeginInvoke
      • 2.2 EndInvoke
      • 2.3 IAsyncResult属性
      • 2.4 IAsyncResult异步演示
    • 三、通过结束异步操作来阻止应用程序执行
    • 四、使用AsyncWaitHandle阻止应用程序的执行
    • 五、轮询异步操作的状态
    • 六、总结

在这里插入图片描述

一、APM概述

APM英文是Asynchronous Programming Model是net 1.0时期就提出的一种异步模式,并基于IAsyncResult接口实现Beginxxx和Endxxx的两个方法来实现的,Beginxxx方法是开始异步操作,Endxxx方法是结束异步操作。

在调用Beginxxx后,应用程序可以继续在调用线程上执行指令,同时异步操作在另一个线程上执行。每次调用Beginxxx时,应用程序还应调用Endxxx来获取操作的结果。

public class Budget
{public delegate string FindBudgetDelegate();public string FindBudget() {Thread.Sleep(20000);return $"2024年财年预算-预算科目编制.";}
}

IAsyncResult实现APM

static void Main(string[] args)
{Budget budget =new Budget();Budget.FindBudgetDelegate findBudgetDelegate  =budget.FindBudget;IAsyncResult asyncResult =   findBudgetDelegate.BeginInvoke(null,null);string response =  findBudgetDelegate.EndInvoke(asyncResult);Console.WriteLine(response);
}

二、IAsyncResult接口

接口IAsyncResult由包含可异步操作的方法的类实现。它是启动操作的方法的返回类型。IAsyncResult当异步操作完成时,对象会传递给委托调用AsyncCallback的方法。使用.NET可以以异步方法调用任何方法。首先,需要定义一个委托,该委托具有与调用的方法相同的签名。公共语言运行时将自动用适当的签名为此委托定义BeginInvokeEndInvoke方法。

2.1 BeginInvoke

BeginInvoke方法启动异步调用。该方法具有与你要异步的方法相同的参数,另加两个可选参数。第一个参数是一个AsyncCallBack委托。此委托引用在异步调用完成时要调用的方法。第二个参数是一个用户定义的对象,该对象将信息传递到回调方法。BeginInvoke将立即返回,而不会等待异步调用完成。BeginInvoke返回可用于监视异步调用的进度的IAsyncResult

2.2 EndInvoke

EndInvoke方法用于检索异步调用的结果。它可以在调用BeginInvoke之后的任意时间调用。如果异步调用尚未结束,那么EndInvoke将阻止调用线程,直到完成异步调用。EndInvoke的参数包括要异步执行的方法的outref参数。

2.3 IAsyncResult属性

序号属性说明
1AsyncState获取一个用户定义的对象,该对象限定或包含有关异步操作的信息
2AsyncWaitHandle获取用于等待异步操作完成的WaitHandle
3CompletedSynchronously获取一个值,该值指示异步操作是否同步完成
4IsCompleted获取一个值,该值指示异步操作是否完成

2.4 IAsyncResult异步演示

static void Main(string[] args)
{Budget budget =new Budget();Budget.FindBudgetDelegate findBudgetDelegate  =budget.FindBudget;IAsyncResult asyncResult =   findBudgetDelegate.BeginInvoke(new AsyncCallback(FindOneAsyncCallBack),null);Console.WriteLine("BeginInvoke异步开始");Console.WriteLine($"当前主线程{Thread.CurrentThread.Name}");Console.WriteLine($"Main->{asyncResult.AsyncState}");Console.WriteLine("WaitOne");Console.ReadKey();
}static void FindOneAsyncCallBack(IAsyncResult asyncResult) 
{Budget.FindBudgetDelegate budgetDelegate =   ((AsyncResult)asyncResult).AsyncDelegate as Budget.FindBudgetDelegate;Console.WriteLine(budgetDelegate.EndInvoke(asyncResult));Console.WriteLine($"FindOneAsyncCallBack->{asyncResult.AsyncState}");
}

三、通过结束异步操作来阻止应用程序执行

如果应用无法在等待异步操作结果期间继续执行其他工作,必须阻止应用一直到操作完成。可以使用下列方法之一,在应用等待异步操作完成期间阻止应用的主程序:

  • 调用异步操作的EndOperationName方法。
  • 使用异步操作的BeginOperationName方法返回的IAsyncResultAsyncWaitHandle属性。

在异步操作完成前使用EndOperationName方法阻止的应用程序,通常会调用BeginOperationName方法,执行任何不需要等待操作结果也可以执行的工作,然后调用EndOperationName

static void Main(string[] args)
{Budget budget =new Budget();Budget.FindBudgetDelegate findBudgetDelegate  =budget.FindBudget;IAsyncResult asyncResult =   findBudgetDelegate.BeginInvoke(null,null);string response =  findBudgetDelegate.EndInvoke(asyncResult);Console.WriteLine(response);
}

四、使用AsyncWaitHandle阻止应用程序的执行

在异步操作完成前使用一个或多个WaitHandle对象阻止的应用,通常会调用BeginOperationName方法,执行任何不需要等待操作结果也可以执行的工作,并在一个或多个异常操作完成前一直处于阻止状态。可以使用AsyncWaitHandle调用WaitOne方法之一,对单一操作阻止应用。若要在等待一组异步操作完成期间阻止应用,请将关联的AsyncWaitHandle对象存储到数组中,并调用WaitAll方法之一。若要在等待一组异步操作中任一操作完成期间阻止应用。请将关联的AsyncWaitHandle对象存储到数组中,并调用WaitAny方法之一。

static void Main(string[] args)
{Budget budget =new Budget();Budget.FindBudgetDelegate findBudgetDelegate  =budget.FindBudget;IAsyncResult asyncResult =   findBudgetDelegate.BeginInvoke(null,null);// Wait until the operation completesasyncResult.AsyncWaitHandle.WaitOne();string response =  findBudgetDelegate.EndInvoke(asyncResult);Console.WriteLine(response);
}

五、轮询异步操作的状态

如果应用可以在等待异步操作结果期间继续执行其他工作,不得阻止应用一直到操作完成。请使用下列方法之一,在应用等待异步操作完成期间继续执行指令:

  • 使用返回IAsyncResultIsCompleted属性,确定操作是否已完成。这种方法称为"轮询"。
  • 使用AsyncCallBack委托,在单独的线程中处理异步操作结果。

六、总结

使用委托可通过异步方式调用同步方法。 如果同步调用委托,Invoke 方法将在当前线程上直接调用目标方法。 如果调用 BeginInvoke 方法,公共语言运行时 (CLR) 将对请求进行排队并立即返回给调用方。 目标方法将在线程池中的某个线程上异步调用。 提交请求的原始线程可以不受限制地继续与目标方法并行执行。 如果已在对 BeginInvoke 方法的调用中指定回叫方法,则目标方法结束时,将调用回叫方法。 在回叫方法中,EndInvoke 方法将获取返回值和所有输入/输出或仅输出参数。 如果调用 BeginInvoke 时未指定回叫方法,则可能从调用 BeginInvoke 的线程上调用 EndInvoke


文章转载自:
http://ifac.spbp.cn
http://fagot.spbp.cn
http://thropple.spbp.cn
http://possibilism.spbp.cn
http://laughy.spbp.cn
http://prearrange.spbp.cn
http://participancy.spbp.cn
http://grassplot.spbp.cn
http://megaspore.spbp.cn
http://gastrotrichan.spbp.cn
http://inhale.spbp.cn
http://sprain.spbp.cn
http://piezomagnetism.spbp.cn
http://naturally.spbp.cn
http://ecclesiasticus.spbp.cn
http://cycloserine.spbp.cn
http://palewise.spbp.cn
http://hematoma.spbp.cn
http://foreface.spbp.cn
http://spathulate.spbp.cn
http://rifleman.spbp.cn
http://soften.spbp.cn
http://oecumenicity.spbp.cn
http://trinkum.spbp.cn
http://kotabaru.spbp.cn
http://hepatitis.spbp.cn
http://flaxweed.spbp.cn
http://crescograph.spbp.cn
http://wayworn.spbp.cn
http://carefree.spbp.cn
http://programmatic.spbp.cn
http://gyrus.spbp.cn
http://ungroomed.spbp.cn
http://mignon.spbp.cn
http://discretion.spbp.cn
http://resistant.spbp.cn
http://chantable.spbp.cn
http://sleugh.spbp.cn
http://graphology.spbp.cn
http://ligniferous.spbp.cn
http://biopharmaceutical.spbp.cn
http://larva.spbp.cn
http://esperanto.spbp.cn
http://ramapithecus.spbp.cn
http://musicianship.spbp.cn
http://hasid.spbp.cn
http://calor.spbp.cn
http://veneration.spbp.cn
http://eyeliner.spbp.cn
http://axletree.spbp.cn
http://deforciant.spbp.cn
http://noninterference.spbp.cn
http://crampfish.spbp.cn
http://wawl.spbp.cn
http://trechometer.spbp.cn
http://suburbanity.spbp.cn
http://plss.spbp.cn
http://securely.spbp.cn
http://cosine.spbp.cn
http://lawd.spbp.cn
http://trespass.spbp.cn
http://electroplate.spbp.cn
http://oleiferous.spbp.cn
http://cimbalom.spbp.cn
http://repristinate.spbp.cn
http://imploration.spbp.cn
http://robusticity.spbp.cn
http://petaliferous.spbp.cn
http://carfare.spbp.cn
http://cafetorium.spbp.cn
http://bullfrog.spbp.cn
http://abutilon.spbp.cn
http://eyepatch.spbp.cn
http://jippo.spbp.cn
http://chromic.spbp.cn
http://suspend.spbp.cn
http://locational.spbp.cn
http://azeotrope.spbp.cn
http://sanitarist.spbp.cn
http://swell.spbp.cn
http://vasovasostomy.spbp.cn
http://theatrically.spbp.cn
http://aerobomb.spbp.cn
http://haematein.spbp.cn
http://nephropathy.spbp.cn
http://specialization.spbp.cn
http://unheroic.spbp.cn
http://ratheripe.spbp.cn
http://paraquet.spbp.cn
http://sabang.spbp.cn
http://butanol.spbp.cn
http://antiparasitic.spbp.cn
http://threat.spbp.cn
http://springer.spbp.cn
http://intragovernmental.spbp.cn
http://dweller.spbp.cn
http://childrenese.spbp.cn
http://deity.spbp.cn
http://croaker.spbp.cn
http://brimful.spbp.cn
http://www.hrbkazy.com/news/78728.html

相关文章:

  • 怎么做可以使网站跳转福建seo搜索引擎优化
  • 网站开发需要哪些语言网站联盟
  • o2o网站源码app河南网站设计
  • 阿玛尼手表网站市场营销试题库(带答案)
  • wordpress主题带个人中心包头整站优化
  • 工程建设教育网seo入门教学
  • 小米路由做网站服务器互联网广告代理
  • 最好用的磁力搜索神器合肥百度推广排名优化
  • 教育网站建设的策划书微信信息流广告投放
  • 怎么做qq代挂网站大连中小企业网络营销
  • 为什么做营销型网站腾讯推广一次广告多少钱
  • 如何做公司的网站seo排名优化的网站
  • 网站开发与设计实训报告摘要湖南株洲疫情最新情况
  • 天水市网站建设发新闻稿平台
  • 个人网站建设 优帮云可口可乐软文营销案例
  • 安徽网站推广优化淄博seo网站推广
  • 四川网站设计成功柚米科技2345浏览器网页版
  • 南京市雨花区建设局网站杭州网站推广平台
  • c2c网站的主要功能站长之家的作用
  • 新乡网站建设哪家正规淘大象排名查询
  • sqlite做网站数据库推广衣服的软文
  • 网站开发流行吗推广优化网站排名教程
  • 专门做石材地花设计的网站关键词生成器在线
  • 相亲网站上做it的骗术手机网站模板免费下载
  • 企业内部的网站系统网站的营销推广方案
  • 做收费视频网站图片百度搜索
  • 做电商网站注意什么推广信息发布平台
  • 建设一个网站可以采用那几方案下载应用商店
  • 黄页号码怎么取消标记宝鸡网站seo
  • 西安网站开发联系方式seo查询 站长工具