1
這是一個好的做法,並且足以確保VB.NET中的方法DoSomething
的線程安全性?如何編寫線程安全的方法?
Public Class MyForm : Inherits Form
Public Sub DoSomething(parameter As Object)
If Me.InvokeRequired Then
Me.Invoke(Sub() DoSomething(parameter))
Else
'Do Something
End If
End Sub
End Class
謝謝你的出色答案!我有時使用過'SyncLock',我明白你的意思,但是由於缺乏知識,我不明白,什麼是無狀態*。你能否給我一個提示,去了解它? – VBobCat
我的意思是,如果方法或對象沒有保持內部狀態,那麼它通常被認爲是線程安全的。換句話說,只要這些方法要求將所有數據作爲輸入參數並將所有結果作爲返回值返回,並且不要將數據讀取或寫入其自己的任何字段,那麼可以同時被多個線程調用。如果對象維護調用之間的值,尤其是調用它的方法或屬性導致它的狀態改變,那麼它是不安全的,因爲它的狀態是不穩定的。 –
我猜可能對我來說使用的更好的術語是_Immutability_,因爲這更一般。 –