J'ai un peu de code que j'ai essayé d'examiner pour la sécurité des threads. J'utilise le modèle de base paresseux singleton trouvé here. Je me demandais si c'est encore thread-safe si je mets l'instance dans l'objet HttpApplicationState. J'ai besoin d'accéder à cette instance à travers toutes les instances de l'application web, donc si ce n'est pas sûr pour les threads, comment puis-je rendre le thread sûr?Sécurité du thread de l'instance singleton C# dans ApplicationState
public sealed class EmailWorker {
private HttpApplicationState _app;
private const EMAIL_WORKER = "EmailWorker";
EmailWorker() { }
class NestedWorker {
static NestedWorker() { }
internal static readonly EmailWorker Instance = new EmailWorker();
}
public static void Initialize(HttpApplicationState appState) {
_appState = appState;
_appState.Lock();
if (_appState[EMAIL_WORKER] == null) {
_appState.Add(EMAIL_WORKER, NestedWorker.Instance);
}
_appState.UnLock();
}
public static EmailWorker Instance {
get {
// TODO: If we haven't called Initialize() first then throw exception
return (EmailWorker)_appState[EMAIL_WORKER];
}
}
}
Un éclaircissement. Je dois y accéder dans toutes les instances de l'application Web. La classe EmailWorker est un thread qui est démarré sur l'événement ApplicationStart. – robbymurphy
@robby: Mais le 'HttpApplicationState' est seulement par application, exactement comme un singleton" standard ". – LukeH
Est-ce parce que l'instance est statique? – robbymurphy