У меня есть немного кода, который я пытался проверить на безопасность потоков. Я использую базовую ленивую модель синглтона, найденную здесь . Мне было интересно, если это все еще потокобезопасно, если я помещаю экземпляр в объект HttpApplicationState. Мне нужно получить доступ к этому экземпляру во всех экземплярах веб-приложения, поэтому, если это не потокобезопасно, как я могу сделать его потокобезопасным?
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];
}
}
}