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