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

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

3天内不再提示

基于IAsyncResult的APM模型实现异步操作

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

C#1 的时候就包含了APM,在 APM 模型中,异步操作通过 IAsyncResult 接口实现,包括两个方法 BeginOperationName 和 EndOperationName ,分别表示开始和结束异步操作。

Demo

我们先来看一个同步示例。新建WPF程序,在界面上放一个按钮。点击按钮访问外网,会有一定时间的阻塞。
pYYBAGL-_qeAPVyfAAD1IE_OjOc100.png

当我们点击按钮后,因为web请求是同步的,会阻塞UI线程一定时间。从输出日志上看阻塞时间是 1 秒钟左右,此时界面呈卡死状态。

poYBAGL-_rmAQnXzAAFr-wN5eyY784.png

日志输出如下:

poYBAGL-_smAYNE6AAArb7NO7WY149.png

从运行效果和日志,我们可以看出:

•WebRequest方法调用前后都是在同一个线程上执行-UI线程

•WebReqeust方法阻塞了UI线程,导致“假死”现象

WebRequest也提供了异步方法,BeginGetResponse,EndGetResponse。我们修改一下代码,新增一个按钮。

poYBAGL-_ymAW9W8AAF1Q51U0Sw475.png

poYBAGL-_y6AOTWZAAA5LQYoYik427.png

poYBAGL-_zOAHVEEAAETOUoVOZI570.pngpYYBAGL-_zqAS42KAAEbyMxfzP8322.png
pYYBAGL-_0yAZdX5AAG4yny4GuM913.png

日志输出如下:

pYYBAGL-_12AM_2aAAA7KWQJx-M423.png

从运行效果和日志,我们可以看出:

•异步方法不会阻塞调用方法,调用后立刻返回

异步方法会在另外一个线程上执行

IAsyncResult

BeginOperationName 方法会返回一个实现了 IAsyncResult 接口的对象。该对象存储了关于异步操作的信息

poYBAGL-_3SAWdDXAACM2tYq1QA599.png

转到定义,我们可以看到接口中都包含哪些内容:

pYYBAGL-_4eASnqaAABRku0vIWA696.png

自定义异步方法

实现该接口,定义自己的异步方法。

poYBAGL-_5mAGXFKAADVN429fBk232.png

我们需要新建一个回调函数:

pYYBAGL-_6qANA47AAClHdlc9o4419.png

在这之后就可以自定义 APM 异步模型了:

poYBAGL-_8aAaAa5AAFNs87dVXU166.png

新增一个按钮,进行调用:

pYYBAGL-_92ARluPAAD6rQPJe84712.png

运行效果如下:

pYYBAGL-__CAGHZJAAFxAYyEPY4508.png

日志输出如下:

poYBAGL_AAOAamJOAAA1XXh4sns725.png

结合效果和日志,我们可以得出如下结论:

•自定义的异步方法没有导致 UI 卡顿

•APM就是把耗时的任务交给新线程去做,然后利用委托进行回调

普通方法的异步

如果是普通方法,也可以通过 委托异步(BeginInvoke, EndInvoke):

pYYBAGL_ABmAHW8uAABIrRtICAY507.png

总结

1.APM 模型是基于IAsyncResult来实现异步操作的

2.异步操作开始时,把委托传递给 IAsyncResult

3.在新线程上执行耗时操作

4.耗时操作结束后,修改 IAsyncResult 里的结果数据,并调用 IAsyncResult 里的委托回调

5.在回调里获取 异步操作 的结果



审核编辑:刘清

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

    关注

    0

    文章

    69

    浏览量

    12858
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • wpf
    wpf
    +关注

    关注

    1

    文章

    18

    浏览量

    8831
收藏 人收藏

    评论

    相关推荐

    异步电机仿真模型

    这里有一个完整的异步电机直接转矩控制的仿真模型,大家可以交流下!
    发表于 10-09 14:04

    【我是电子发烧友】低功耗设计的最佳编程模型异步编程

    异步编程可以编写出速度快、资源省的高效程序,可以在单线程环境下实现高并发,可以在没有操作系统的情况下实现TCP/IP等协议栈。又快又省可以将功耗控制在最低水平,因此
    发表于 04-29 20:30

    阿里云 APM 解决方案地图

    用程序进行接口性能,链路追踪,以及错误诊断三个方面监控。其中,应用监控通过探针,亦可捕获容器和操作系统的性能和状态,因此也可用于容器和操作系统的性能监控。操作系统:主要由云监控的主机监控来实现
    发表于 07-05 16:54

    三相异步电机静止状态下参数辨识MATLAB仿真模型

    三相异步电机静止状态下参数辨识MATLAB仿真模型实现对定子电阻、转子电阻、互感和漏感的辨识。
    发表于 08-15 13:16

    如何对三相异步电机SPWM变频调速系统模型进行Simulink仿真

    三相异步电机SPWM的基本原理是什么?怎样去搭建一种三相异步电机SPWM变频调速系统模型?如何对三相异步电机SPWM变频调速系统模型进行Si
    发表于 08-02 06:12

    为什么说回调函数可以实现异步操作

    的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。补充说明:回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。问题:1.为什么说回调函数可以实现
    发表于 08-11 08:18

    异步电动机动态数学模型

    ...PAGE...目录 TOC \o "1-3" \h \z \u1 引言 12 异步电动机动态数学模型 22.1异步电动机动态数学模型的性质 22.2三相
    发表于 09-03 06:54

    基于MATLAB及SIMULINK的异步电动机仿真模型及起动过程的仿真

    基于MA TL ABΠSIMUL IN K的异步电动机仿真模型及起动过程的仿真邓建国①(湖南大学电气与信息工程学院,湖南长沙410082)摘 要:利用MA TLAB软件中的动态仿真工具SIMUL
    发表于 09-06 06:11

    介绍一种基于matlab/simulink的异步电动机仿真模型

    本文从异步电动机的数学模型着手介绍一种基于matlab/simulink的异步电动机仿真模型,使用时只需要输入不同的电机参数即可。在此基础上设计一个典型的直接矢量控制系统,然后利用Si
    发表于 09-06 06:42

    Modelica标准库里的异步电机模型

    Modelica标准库里的异步电机模型过于复杂,为了便于学习,我用最基本的异步电机方程写了一个Modelica模型,公式参照陈伯时的《电力拖动自动控制系统--运动控制系统》第3版的19
    发表于 09-06 07:46

    如何使用多线程和异步操作等并发设计方法来最大化程序的性能

      异步与多线程的区别  一、异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个
    发表于 08-23 16:31

    异步事件驱动模型在嵌入式系统中的应用

    异步事件驱动并发模型运用于嵌入式Linux,可使程序占用系统资源少、运行效率高。本文介绍了以libcssl函数库中提供的串行接口函数,在嵌入式 Linux的串行通信中实现异步事件驱
    发表于 06-09 09:07 13次下载

    APM飞行操作

    有关APM飞控的飞行操作的完整教程,初学者必读的教材。
    发表于 02-23 10:52 0次下载

    CUDA简介: CUDA编程模型概述

    在 CUDA 编程模型中,线程是进行计算或内存操作的最低抽象级别。 从基于 NVIDIA Ampere GPU 架构的设备开始,CUDA 编程模型通过异步编程
    的头像 发表于 04-20 17:16 2494次阅读
    CUDA简介: CUDA编程<b class='flag-5'>模型</b>概述

    介绍一种基于任务的异步模式TAP

    TAP是基于任务的异步模式,在 .NET Framework 4 中引入。TAP是 APM 和 EAP,是推荐的模式模式。
    的头像 发表于 08-19 11:45 2223次阅读