普通方法調用,Invoke,begininvoke三者的區別總結及異步與同步的區別總結


(1)普通方法調用(直接調用)與Invoke()方法調用方法 使用的線程Id是一樣的 即屬於同步。

(2)BeginInvoke(<輸入和輸出變量>,AsyncCallback callback,object asyncState)方法調用方法 則是啟用了新的線程Id       屬於異步

可通過 Thread.CurrentThread.ManagedThreadId    獲取當前線程的Id

 

*委托類型的BeginInvoke(<輸入和輸出變量>,AsyncCallback callback,object asyncState)方法 

異步調用的核心, BeginInvoke(多線程能執行的原因)。

輸入和輸出變量:表式委托對應的實參。

第二個參數(AsyncCallback callback):回調函數,表示異步調用后自動調用的函數 ,共用一個線程id.  AsyncCallback是一個委托   有一個參數(asyncState )

第三個參數(object asyncState):用於向回調函數提供參數信息。返回值:IasyncResult:異步操作狀態接口,封裝了異步執行中的參數。

EndInvoke監視BeginInvoke。委托類型的EndInvoke()方法:借助IasyncResult接口對象,不斷查詢異步調用是否結束。該方法知道異步調用的方法所有參數,所以,異步調用完畢后,取出異步調用的結果作為返回值。

對於同步和異步的總結:異步三大特點

(1)同步方法會出現“假死現象”即卡住界面,異步則不會 原因:異步啟動了子線程執行任務,主線程得到釋放

(2)同步速度慢,異步速度快  原因:異步啟動了多個線程執行任務,占用更多的資源(異步時cpu瞬間上升)

(3)異步是無序的 原因:線程的啟動和執行是由操作系統決定的,是無序的。可能每個子線程里面耗時不一樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM