C'est une question assez simple, et j'imagine que c'est le cas, mais je ne trouve pas de réponse définitive. Est-ce que SynchronizationContext.Post()
threadsafe?SynchronizationContext.Post() threadsafe?
J'ai une variable membre qui contient le contexte du thread principal, et _context.Post()
est appelée à partir de plusieurs threads. J'imagine que Post()
pourrait être appelé simultanément sur l'objet. Dois-je faire quelque chose comme
lock (_contextLock) _context.Post(myDelegate, myEventArgs);
ou est-ce inutile?
Edit: "membres d'instance ne sont pas garantis comme sûrs"
MSDN affirme que dois-je conserver mon lock()
, alors?
En regardant le code désassemblé, cette méthode appelle simplement ThreadPool.QueueUserWorkItem qui, selon msdn, est thread-safe. –
@Phil: Ce n'est pas surprenant. Malheureusement, Microsoft s'est effectivement réservé le droit de modifier l'implémentation d'une manière qui annulerait son comportement thread-safe actuel dans une future version ou un service pack. Je suppose qu'ils ont vraiment l'intention pour cette classe d'avoir des méthodes d'instance thread-safe et qu'ils ont juste foiré la documentation. Mais, encore une fois, c'est juste une hypothèse. –
Compte tenu de son utilisation, il serait stupide pour eux de le changer pour ne pas être thread safe! – RichardOD