2010-06-22 3 views
1

WaitHandle.WaitOne() a une option ExitContext pour permettre la libération temporaire d'un verrou de ressources avant d'en conserver une autre. Ceci est utile dans certains cas où un verrouillage à mort ou un manque de fil peut se produire.Quels scénarios constituent un contexte d'exécution non-par défaut dans .Net?

Le msdn documentaiton parle d'un contexte par défaut. Ils se réfèrent uniquement à des exemples qui constituent un contexte sans faute impliquant ContexBoundObject (voir Related Qusetion).

D'autres options de synchronisation, telles que les instructions Monitor.Enter(), Lock {}, constituent-elles également un contexte non défini par défaut? Quels autres scénarios placeraient une exécution de thread dans un contexte différent de celui par défaut?

Répondre

1

C'est un sujet délicat et je ne sais pas assez à ce sujet. Ce que je sais, c'est que c'est pertinent dans les scénarios Remoting. En passant True, vous pouvez éviter la communication du blocage jusqu'à ce que l'attente soit résolue et autoriser l'envoi d'autres messages. Oui, évite les interblocages mais peut causer des problèmes de synchronisation.

Cet argument de WaitOne() a causé tellement de confusion et FUD que .NET 2.0 SP1 a eu une rupture de compatibilité. Ils ont ajouté les surcharges WaitOne (int) et WaitOne (TimeSpan) pour éviter d'avoir à deviner la valeur correcte de l'argument exitContext. Ce qui devrait normalement être faux.