/ / Como escrever métodos seguros para threads? - vb.net, multithreading, segurança de threads

Como escrever métodos de thread-safe? - vb.net, multithreading, thread-safety

Esta é uma boa prática e suficiente para garantir a segurança do thread no método DoSomething no VB.NET?

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

Respostas:

3 para resposta № 1

Eu acredito que você pode significar algo diferente por segurança de rosca que a definição usual do termo. O significado normal do termo é que o mesmo método ou objeto pode ser chamado por vários threads simultaneamente, sem erros ou efeitos colaterais negativos. Normalmente, esse tipo de segurança de linha é realizado via apatridia e bloqueio (por exemplo, SyncLock).

No entanto, no seu exemplo, o código não étentando fornecer esse tipo de segurança de linha, ou pelo menos não diretamente. Ele realiza esse tipo de segurança de encadeamento, mas apenas forçando todas as invocações a serem executadas no mesmo encadeamento único (o encadeamento da interface do usuário). Os aplicativos WinForm (que eu presumo que sejam) exigem que todo o trabalho da interface do usuário seja feito no thread da interface do usuário. Portanto, se um método que faz algo com a interface do usuário for chamado de outro encadeamento, ele deverá primeiro invocar novamente o encadeamento da interface do usuário antes de concluir seu trabalho. Para esse cenário específico, o código que você postou está correto.