0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取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 秒鐘左右,此時界面呈卡死狀態(tài)。

poYBAGL-_rmAQnXzAAFr-wN5eyY784.png

日志輸出如下:

poYBAGL-_smAYNE6AAArb7NO7WY149.png

從運行效果和日志,我們可以看出:

?WebRequest方法調用前后都是在同一個線程上執(zhí)行-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

從運行效果和日志,我們可以看出:

?異步方法不會阻塞調用方法,調用后立刻返回

?異步方法會在另外一個線程上執(zhí)行

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.在新線程上執(zhí)行耗時操作

4.耗時操作結束后,修改 IAsyncResult 里的結果數據,并調用 IAsyncResult 里的委托回調

5.在回調里獲取 異步操作 的結果



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • APM
    APM
    +關注

    關注

    1

    文章

    71

    瀏覽量

    13010
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11563
  • wpf
    wpf
    +關注

    關注

    1

    文章

    18

    瀏覽量

    8880
收藏 人收藏

    評論

    相關推薦

    異步電機仿真模型

    這里有一個完整的異步電機直接轉矩控制的仿真模型,大家可以交流下!
    發(fā)表于 10-09 14:04

    【我是電子發(fā)燒友】低功耗設計的最佳編程模型異步編程

    異步編程可以編寫出速度快、資源省的高效程序,可以在單線程環(huán)境下實現高并發(fā),可以在沒有操作系統(tǒng)的情況下實現TCP/IP等協議棧。又快又省可以將功耗控制在最低水平,因此
    發(fā)表于 04-29 20:30

    阿里云 APM 解決方案地圖

    用程序進行接口性能,鏈路追蹤,以及錯誤診斷三個方面監(jiān)控。其中,應用監(jiān)控通過探針,亦可捕獲容器和操作系統(tǒng)的性能和狀態(tài),因此也可用于容器和操作系統(tǒng)的性能監(jiān)控。操作系統(tǒng):主要由云監(jiān)控的主機監(jiān)控來實現
    發(fā)表于 07-05 16:54

    三相異步電機靜止狀態(tài)下參數辨識MATLAB仿真模型

    三相異步電機靜止狀態(tài)下參數辨識MATLAB仿真模型,實現對定子電阻、轉子電阻、互感和漏感的辨識。
    發(fā)表于 08-15 13:16

    如何對三相異步電機SPWM變頻調速系統(tǒng)模型進行Simulink仿真

    三相異步電機SPWM的基本原理是什么?怎樣去搭建一種三相異步電機SPWM變頻調速系統(tǒng)模型?如何對三相異步電機SPWM變頻調速系統(tǒng)模型進行Si
    發(fā)表于 08-02 06:12

    為什么說回調函數可以實現異步操作

    的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。補充說明:回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發(fā)生時由另外的一方調用的,用于對該事件或條件進行響應。問題:1.為什么說回調函數可以實現
    發(fā)表于 08-11 08:18

    異步電動機動態(tài)數學模型

    ...PAGE...目錄 TOC \o "1-3" \h \z \u1 引言 12 異步電動機動態(tài)數學模型 22.1異步電動機動態(tài)數學模型的性質 22.2三相
    發(fā)表于 09-03 06:54

    基于MATLAB及SIMULINK的異步電動機仿真模型及起動過程的仿真

    基于MA TL ABΠSIMUL IN K的異步電動機仿真模型及起動過程的仿真鄧建國①(湖南大學電氣與信息工程學院,湖南長沙410082)摘 要:利用MA TLAB軟件中的動態(tài)仿真工具SIMUL
    發(fā)表于 09-06 06:11

    Modelica標準庫里的異步電機模型

    Modelica標準庫里的異步電機模型過于復雜,為了便于學習,我用最基本的異步電機方程寫了一個Modelica模型,公式參照陳伯時的《電力拖動自動控制系統(tǒng)--運動控制系統(tǒng)》第3版的19
    發(fā)表于 09-06 07:46

    異步事件驅動模型在嵌入式系統(tǒng)中的應用

    異步事件驅動并發(fā)模型運用于嵌入式Linux,可使程序占用系統(tǒng)資源少、運行效率高。本文介紹了以libcssl函數庫中提供的串行接口函數,在嵌入式 Linux的串行通信中實現異步事件驅
    發(fā)表于 06-09 09:07 ?13次下載

    APM飛行操作

    有關APM飛控的飛行操作的完整教程,初學者必讀的教材。
    發(fā)表于 02-23 10:52 ?0次下載

    CUDA簡介: CUDA編程模型概述

    在 CUDA 編程模型中,線程是進行計算或內存操作的最低抽象級別。 從基于 NVIDIA Ampere GPU 架構的設備開始,CUDA 編程模型通過異步編程
    的頭像 發(fā)表于 04-20 17:16 ?3004次閱讀
    CUDA簡介: CUDA編程<b class='flag-5'>模型</b>概述

    異步、同步電機的模型、矢量控制圖

    異步、同步電機的模型、矢量控制
    發(fā)表于 07-04 14:56 ?3次下載

    介紹一種基于任務的異步模式TAP

    TAP是基于任務的異步模式,在 .NET Framework 4 中引入。TAP是 APM 和 EAP,是推薦的模式模式。
    的頭像 發(fā)表于 08-19 11:45 ?2638次閱讀

    異步電機控制筆記

    異步電機控制筆記 本筆記討論異步電機的控制算法。先對異步電機在ABC坐標系以及DQ0坐標系下的電壓方程與磁鏈方程進行推導,然后對常用的旋轉坐標系下的異步電機
    發(fā)表于 03-29 11:40 ?5次下載
    <b class='flag-5'>異步</b>電機控制筆記