У меня есть немного кода, который я пытался проверить на предмет безопасности потоков. Я использую базовую ленивую модель синглтона, найденную here. Мне было интересно, если он по-прежнему является потокобезопасным, если я помещаю экземпляр в объект HttpApplicationState. Мне нужно получить доступ к этому экземпляру во всех экземплярах веб-приложения, поэтому, если это не безопасно для потоков, как я могу сделать его потокобезопасным?Безопасность потоков экземпляра C# singleton в 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];
}
}
}
Немного разъяснений. Мне нужно получить к нему доступ во всех экземплярах веб-приложения. Класс EmailWorker - это поток, который запускается в событии ApplicationStart. – robbymurphy
@robby: Но «HttpApplicationState» - это только одно приложение, точно такое же, как «стандартный» синглтон. – LukeH
Это потому, что экземпляр является статическим? – robbymurphy