Я изучаю C#. Извините за вопрос о новичке.Является ли код, который генерируется автоматически с помощью Visual Studio в потоковом режиме?
Это часть некоторого кода, который автоматически генерируется Visual Studio 2015 при запуске проекта Windows Forms. Это в Form1.Designer.cs
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Я пытаюсь увидеть, если я понимаю концепцию безопасности потоков правильно. Невозможно ли установить components
значение null
между тем, как вычисляется оператор if
и вызывается время components.Dispose()
?
Заранее благодарим за помощь!
Тогда я правильно понял! Вы очень помогли. Спасибо. –
Но код должен быть потокобезопасным, если он является частью некоторого API, который должен использоваться совместно и реализован сторонними кодерами? Или две нити, которые используют один и тот же объект, по-прежнему считаются ошибкой со стороны исполнителя, а не недостатком API? Я мог бы использовать немного больше вашего понимания, если все в порядке. –
@KyleDelaney Обычно вам нужно реализовать 'IDisposable', если у вас есть неуправляемые ресурсы, необходимые для уборки. Было бы тривиально сделать вызов «потокобезопасным» в том, что вторичный вызов ничего не сделал (простая проверка флажка с помощью «Блокировка»), но это более защитная кодировка, а не ее поточное. Вы должны определить *, что это означает *, чтобы объект располагался дважды в одно и то же время. Я не вижу причины, по которой два потока считали бы, что им нужно распоряжаться объектом - как правило, тот, кто * вызвал * приобретение неуправляемых ресурсов, будет отвечать за очистку. – Rob