0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个符合EAP模式的示例声明实现

冬至配饺子 来源:希夏普 作者:jqwang 2022-08-19 11:42 次阅读

EAP(Event-based Asynchronous Pattern) 是基于事件的异步模式,在 .NET Framework 2.0 中引入。EAP 需要一个有 Async 后缀方法和一个或多个事件。EAP不再推荐用于新开发

EAP

一个符合 EAP 模式的示例声明如下:

poYBAGL_BVSACbZ6AADl4NYOGqs759.png

BackgroundWorker

BackgroundWorker 是一个典型的 EAP 实现。

pYYBAGL_BYuAAKIXAAGFoVaPk4E766.pngpoYBAGL_BZGAOigJAAC8f6jct-g226.png

程序运行效果:

pYYBAGL_Ba6AdOPcAAEJwP11zYI879.png

日志输出:

poYBAGL_Bb6ATB7aAAA68PiRFQE615.png

从效果和日志上看:

•EAP 不会阻塞调用线程

•异步操作真正执行是在另外一个线程

•RunWorkerCompleted 回调会回到调用线程(UI线程)

和APM比起来很像,好像只是把 委托绑定 放到了外面。我们可以看一下 BackgroundWorker 的源码:

1.在构造函数里实例化一个委托threadStart

poYBAGL_Bd-ARstAAAEAABVxFrE752.png

poYBAGL_BeSAVx2nAABhyEnh-z8800.png

2.调用 RunWorkerAsync() 方法

poYBAGL_BfqAebZhAACo9jMVAvA015.png

看起来 EAP 的本质,还是使用了委托的异步方式(BeginInvoke),实质上还是 APM 异步模式。

多任务

如果有多个异步任务,我们希望按照先后顺序执行,并且需要在调用线程上得到所有返回值。

poYBAGL_BiCAbZrqAAD8AmfHaUM302.pngpYYBAGL_Bi-AaiwHAAFI9DSCDSs650.png

运行起来,发现有异常:

poYBAGL_BkSAOZGCAACXEBLdRk8500.png

由此可见在完成第一个异步操作之前没有对asyncResult2进行赋值,asyncResult2执行异步等待的时候报异常。也可以有其他方法来解决这个问题,但会比较复杂。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APM
    APM
    +关注

    关注

    0

    文章

    69

    浏览量

    12861
  • 线程
    +关注

    关注

    0

    文章

    489

    浏览量

    19495
  • .NET技术
    +关注

    关注

    0

    文章

    3

    浏览量

    5795
收藏 人收藏

    评论

    相关推荐

    有没有办法或示例来编写函数来检查CAN硬件的接收缓冲区并以更符合RTOS的轮询方式提取任何新消息?

    需将该函数声明为静态函数,从而消除了在芯片上不同CAN总线设备之间重用代码的许多好处。 有没有办法或示例来编写函数来检查 CAN 硬件的接收缓冲区并以更
    发表于 01-25 06:47

    使用TLSV1.2返回EAP的无效安全性密钥

    无法连接到2018网络策略服务器安全WPA2、企业模式、方法与tlsv1.2 EAP-TLS和EAP-PEAP。发现问题是MSK的BESL恳求出口。返回到主机取代Besl按照规格
    发表于 08-16 02:12

    符合声明5087A

    符合声明 -5087A
    发表于 03-12 11:55

    CE认证中的DOC符合声明是什么意思?

    符合声明即Declaration of Conformity,CE认证指令规定制造商或其在欧洲设立的授权代表有义务制定符合声明(或“欧盟符合
    发表于 10-31 08:42

    求使用EAP协议的Arduino代码示例

    我正在寻找使用 EAP 协议的 ESP8266 的可用示例,但我还没有通过使用 Arduino 框架成功,所有参考文献都有问题,即它们是需要在尚未最终确定的线程中更改的代码。有人可
    发表于 02-27 06:52

    是否有使用eLCDIF在MPU模式下驱动显示器的代码示例

    eLCDIF 章节中,它声明 LCD 控制器也可以支持 MPU 模式 是否有使用 eLCDIF 在 MPU 模式下驱动显示器的代码示例?还是应用笔记?如果它真的可以支持 MPU
    发表于 03-30 08:39

    为 EMIF UniPHY 示例设计定制流量模式的方法

    如何为 EMIF UniPHY 示例设计定制流量模式
    的头像 发表于 06-20 01:10 8129次阅读
    为 EMIF UniPHY <b class='flag-5'>示例</b>设计定制流量<b class='flag-5'>模式</b>的方法

    MAX4507EAP MAX4507EAP - (Maxim Integrated) - 专用 IC

    电子发烧友网为你提供()MAX4507EAP相关产品参数、数据手册,更有MAX4507EAP的引脚图、接线图、封装手册、中文资料、英文资料,MAX4507EAP真值表,MAX4507EAP
    发表于 11-16 20:12
    MAX4507<b class='flag-5'>EAP</b> MAX4507<b class='flag-5'>EAP</b> - (Maxim Integrated) - 专用 IC

    RX23W 的目标板 CE Rev.2.00 符合声明

    RX23W 的目标板 CE Rev.2.00 符合声明
    发表于 02-02 19:07 0次下载
    RX23W 的目标板 CE Rev.2.00 <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b>

    RX23W 模块目标板 中国 RoHS Rev.1.00 符合声明

    RX23W 模块目标板 中国 RoHS Rev.1.00 符合声明
    发表于 02-02 19:20 0次下载
    RX23W 模块目标板 中国 RoHS Rev.1.00 <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b>

    RX23W 模块的目标板 CE 符合声明 Rev.1.00

    RX23W 模块的目标板 CE 符合声明 Rev.1.00
    发表于 02-02 19:20 0次下载
    RX23W 模块的目标板 CE <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b> Rev.1.00

    RX23W 的目标板 CE Rev.2.00 符合声明

    RX23W 的目标板 CE Rev.2.00 符合声明
    发表于 07-04 18:54 0次下载
    RX23W 的目标板 CE Rev.2.00 <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b>

    RX23W 模块目标板 中国 RoHS Rev.1.00 符合声明

    RX23W 模块目标板 中国 RoHS Rev.1.00 符合声明
    发表于 07-04 19:06 0次下载
    RX23W 模块目标板 中国 RoHS Rev.1.00 <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b>

    RX23W 模块的目标板 CE 符合声明 Rev.1.00

    RX23W 模块的目标板 CE 符合声明 Rev.1.00
    发表于 07-04 19:06 0次下载
    RX23W 模块的目标板 CE <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b> Rev.1.00

    RL78/G1M、G1N 快速原型板 CE 符合声明

    RL78/G1M、G1N 快速原型板 CE 符合声明
    发表于 07-04 20:33 0次下载
    RL78/G1M、G1N 快速原型板 CE <b class='flag-5'>符合</b>性<b class='flag-5'>声明</b>