非同步與執行緒深度解析

2022-01-13 19:10:20 字數 1242 閱讀 5622

注:一般人們都把非同步與同步做比較,今天我們把非同步與執行緒做比較。請大家多多指教、批評。

最近用c#(framework 2.0)寫了乙個系統,這個系統用了很多非同步和執行緒。當我用異常或執行緒操作、更新控制項資訊的時候會提示乙個異常資訊「執行緒間操作無效,從不是建立控制項的執行緒訪問控制項」,以前用也遇到過這種問題,最後是用invoke解決的。但是這次遇到同樣的問題,解決方法用到了control.checkforillegalcrossthreadcalls這個屬性,把它設定為false;檢視msdn的備註資訊,解釋如下:

訪問 windows 窗體控制項本質上不是執行緒安全的。如果有兩個或多個執行緒操作某一控制項的狀態,則可能會迫使該控制項進入一種不一致的狀態。還可能出現其他與執行緒相關的 bug,包括爭用情況和死鎖。確保以執行緒安全方式訪問控制項非常重要。

.net framework 有助於在以非執行緒安全方式訪問控制項時檢測到這一問題。在偵錯程式中執行應用程式時,如果建立某控制項的執行緒之外的其他執行緒試圖呼叫該控制項,則偵錯程式會引發乙個 invalidoperationexception,並提示訊息:「從不是建立控制項 control name 的執行緒訪問它。」

此異常在除錯期間和執行時的某些情況下可靠地發生。強烈建議您在顯示此錯誤資訊時修復此問題。在除錯以 .net framework 2.0 版之前的 .net framework 編寫的應用程式時,可能會出現此異常。

注意 可以通過將 checkforillegalcrossthreadcalls 屬性的值設定為 false 來禁用此異常。這會使控制項以與在 visual studio 2003 下相同的方式執行。

從以上的解釋來看,其實非同步是基於委託操作方法,以執行緒機制來完成的。當然從面表面上我們可以這樣理解,但是兩者具體實現機制是怎麼樣的,我們還需要深入**。就是程式設計經驗來說,兩者在使用上還是有相同點和不同點的:

相同點:

1)他們都可以做任務來執行,不會使軟體界出現假死現象。

2)在異常和執行緒裡操作控制項,如果不特殊處理的話,都會出現「執行緒間操作無效,

從不是建立控制項的執行緒訪問  控制項」異常

不同點:

1)非同步是乙個某一時間點的任務;執行緒可以可以作為實時任務。

量引數來自物件的全域性變數。

3)非同步的結束採用**函式來釋放資源,不需要人為干涉;而執行緒做為實時任務,

在資源控制方面更多需要我為控制。

4)非同步更容易控制;執行緒在控制的時候更需要細節方面的知識。

源自:【

百木破解

】非同步與執行緒深度解析

執行緒與非同步

多執行緒和非同步操作的異同 多執行緒和非同步操作兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為多執行緒和非同步操作是等同的概念。但是,多執行緒和非同步操作還是有一些區別的。而這些區別造成了使用多執行緒和非同步操作的時機的區別。非同步操作的本質 所有的程式最終都...

深度解析執行緒工作原理

1,執行緒的概念 乙個程式中的方法有幾條執行路徑,就有幾個執行緒 2,執行緒的建立 兩種方式 1,繼承thread class testthread extends thread 2,實現runnable介面,然後作為引數傳入到thread類的構造方法中 class testthread imple...

執行緒同步與非同步

多執行緒併發時,多個執行緒同時請求同乙個資源,必然導致此資源的資料不安全,a執行緒修改了b線 程的處理的資料,而b執行緒又修改了a執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解 決此問題,優先考慮使用區域性變數,退而求其次使用同步 塊,出於這樣的安全考慮就必須犧牲 系統處理效能,加在多執...