Возможно ли, чтобы конструктор был предварительно выпущен в С#?
Например, рассмотрим код:
public class A
{
public bool ready = true;
public A()
{
ready = false; // Point #1
// Other initialization stuff
ready = true; // Point #2
}
}
Где-то еще в коде два потока имеют доступ к переменной типа A, первый поток вызывает конструктор, который предварительно упущен в точке # 1. Затем второй поток проверяет на ready
и считает, что он по-прежнему прав, поэтому он делает что-то плохое.
Возможно ли это?
Более конкретно:
- Может ли быть упреждающий конструктор?
- Если да, значит ли это, что в конструкторе должен быть код синхронизации, например
lock
? - Создается ли объект только для общей переменной после выхода из конструктора, тем самым избегая вопроса вообще?