Size: a a a

var chat = new Chat();

2021 September 01

A

Aleksey in var chat = new Chat();
1. можно спросить сколько человек в команде/роли
2. какие технологии
3. какой домен проекта
источник

ВE

Виталий EasyMod... in var chat = new Chat();
Можно спросить любой вопрос, который тебя не дискредитирует окончательно в ноль 😁
источник

ВE

Виталий EasyMod... in var chat = new Chat();
Еще твои вопросы могут показать твою компетентность, что ты в теме. Если ты конечно в теме
источник

EG

Egor Gusarenko in var chat = new Chat();
А почему не Lazy<HubConnection> пропертю сделать? Если я не ошибаюсь, то решит те же проблемы, зачем такой велосипед?
источник

Ɖ

Ɖrēw in var chat = new Chat();
Не совсем понимаю, как Lazy решает проблему синхронизации доступа к ресурсу
источник

EG

Egor Gusarenko in var chat = new Chat();
Там проблема синхронизации доступа к ресурсу только в контексте обеспечения единичной отложенной инициализации, судя по коду
источник

EG

Egor Gusarenko in var chat = new Chat();
Семафор он использует только if (connection == null) для того чтоб если мы постучались сразу с нескольких потоков в критическую секцию не попытались заинициализировать коннект несколько раз
источник

EG

Egor Gusarenko in var chat = new Chat();
Lazy ж то же самое делает, гарантируя единичную инициализацию
источник

Ɖ

Ɖrēw in var chat = new Chat();
the lock makes sure multiple calls to GetConnection will return a single initialized instances also making it lazily started.
источник

Ɖ

Ɖrēw in var chat = new Chat();
А точно ли Lazy сам по себе потокобезопасен?
источник

EG

Egor Gusarenko in var chat = new Chat();
Я пошел дополнительно копать, но на моей памяти всегда был
источник

Ɖ

Ɖrēw in var chat = new Chat();
Чтобы утверждать, что его нельзя дважды взять и заинициализировать одновременно, например
источник

EG

Egor Gusarenko in var chat = new Chat();
источник

EG

Egor Gusarenko in var chat = new Chat();
You can use one of the simple constructors whose default behavior is to create a thread-safe Lazy<T> object, so that only one instance of the lazily instantiated object is created no matter how many threads try to access it.
источник

EG

Egor Gusarenko in var chat = new Chat();
Так что да, Lazy делает ровно все то, о чем человек написал в статье, только одной строчкой (делегат в конструктор передать который заинициализирует коннект и volia)
источник

EG

Egor Gusarenko in var chat = new Chat();
Семь бед - один ответ, костыль и велосипед
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ну окей, раз так, тогда да
источник

Dv

Dr. Friedrich von Ne... in var chat = new Chat();
При инициализации вызывается асинхронный метод, так что не всё так просто.
источник

VL

Vova Lantsov in var chat = new Chat();
Да, из-за асинхронного вызова

Можно было бы метод StartAsync сделать ValueTask и проверять в начале что он уже запущен, по типу такого

var connection = _connectionLazy.Value;
await connection.StartAsync();

А внутри StartAsync:
if (Interlocked.Exchange(ref _startedFlag, 1) == 1)
   return;
await DoSomethingForStart();
источник

VL

Vova Lantsov in var chat = new Chat();
В таком случае Lazy класс подходит, да
источник