monitor.Enter/Exit вместо lock иам используется для того, чтобы компилятор не ругался на вызов await внутри. То есть здесь таким грубым способом обходят запрет на await внутри блока синхронизации монитора. И это также важно упомянуть, поскольку так делать нельзя из-за того, что до мы взодим в монитор из одного потока, а выйти можем из другого (после await)
@sciencena4340Ай бұрын
А как можно обеспечить потокобезопасность в таком случае ?
@anastascat2770Ай бұрын
@@sciencena4340 , через другие примитивы синхронизации. Например семафор
@cubgradАй бұрын
@@sciencena4340 через SemaphorSlim(1, 1). Сверху описан шикарный кейс для получения дедлоков, семафор решает эту проблему
@SergeyBulavskiyАй бұрын
@@sciencena4340 SemaphoreSlim
@КонстантинКонстантин-й5рАй бұрын
@@sciencena4340использовать SemaphoreSlim, например
@magomedyasulov648221 күн бұрын
Там еще локер _sync статический, вроде забыл упомянуть
@aniband53872 ай бұрын
Очень хороший контент. Продолжай так делать, так как на ютубе мало контента где разбирается оптимизация кода, и думаю ты его сможешь грамотно провести. Именно брать куски кода, провести ревью и указать что и как лучше будет сделать
@woutakwot98312 ай бұрын
у меня такая же задача на собесе была, подтверждаю
@hhgforfhuv2 ай бұрын
ещё момент: нельзя эвейтить между Monitor.Enter и Exit, т.к. монитор требует одного и того же потока на открытие и закрытие, в то время как async await такое не гарантирует
@eugenezaznoba35912 ай бұрын
тоже хотел сказать об этом, при наличии async/await для синхронизации обычно используется SemaphoreSlim
@dannythehumbleguy2 ай бұрын
@@hhgforfhuv Точно, все таки забыл что-то)
@AlexYakunin2 ай бұрын
Ну и если бы была гарантия, что await продолжает код в том же потоке (там не .ConfigureAwait(false), что вроде-как подразумевает, что код вызывается из UI thread), Monitor.Enter блокировал бы конкурирующие потоки на время ожидания в await, "выводя" их на это время из пула. Что эффективно делает асинхронный код синхронным (т.к. он требует ровно того же кол-ва потоков, что эквивалентный код без async/await).
@ЕвгенийП-д8л2 ай бұрын
По этой же причине lock там нельзя использовать. И этого не позволит компилятор.
@xenm852 ай бұрын
Вот это классная задача для собеса. А не эти задачи по типу - что выведет этот код или напиши функцию сортировки какую нибудь
@jiggaaut2 ай бұрын
через фабрику можно инжектить сервисы
@KenKaneki-ze7xrАй бұрын
В методе регистер если сделать Interlocked.Increment, 1 поток заинкрементил а далее переключился, не успев добавить в словарь, второй поток заинкрементил. получилась ошибка, нужно лок делать на добавление и инкремент
@dannythehumbleguyАй бұрын
Interlocked умеет возвращать значание, аля var a = Interlocked.Increment(ref k); Так что все ок.
@Schumacher57Ай бұрын
А можно список книг за спиной?) Виду Рихтера, Маконела…
@dannythehumbleguyАй бұрын
СИКП, Код Петцольда, Управление памятью в .net для проффесионалов, Грокаем функциональное программирование
@Schumacher57Ай бұрын
@@dannythehumbleguy ооо круто. А управление памятью прочли?) Посоветуете? Или так фигня? Я всё думаю, взяться за неё)
@dannythehumbleguyАй бұрын
@@Schumacher57 книга хорошая, но я задушился на главе об устройстве памяти и отложил пока
@Light_Script-xh9wwАй бұрын
Можно было тут ещë вместо Monitor использовать семафор для ограничения числа потоков
@yernaryerzhanuly5626Ай бұрын
А монитор по вашему сколько потоков разрешает что его надо ограничивать?
@shnextv1217Күн бұрын
Не можно, а нужно было использовать SemaphoreSlim. Так как await между Monitor.Enter/Exit использовать нельзя!
@vanel9933Ай бұрын
Что за чушь про то, что свойства находятся между конструкторами и полями??
@dannythehumbleguyАй бұрын
в видео объясняется, пересмотри)
@vanel9933Ай бұрын
@@dannythehumbleguy в видео ссылка на некие конвеции mircosoft, хотя corefx codestyle подразумевает свойства после конструктора. да и в ссылках в описании этой рекомендации я не нашел
@Schumacher57Ай бұрын
5:20 вот уже месяц пытаюсь понять, что нужно использовать. Я постараюсь высказаться максимально толерантно. Правда жаль, что я не могу разобрать, что автор сказал. Может я один такой. Но блин, при картавости, можно пожалуйста какие-то понятия постараться либо проговаривать, либо выводить текстом в видео. Просто слышишь что-то интересное, а всё коту под хвоста из-за того что просто проторобанил…
@dannythehumbleguyАй бұрын
TryAdd вместо добавления через квадратные скобки
@Schumacher57Ай бұрын
@@dannythehumbleguy О, я не слышал. Спасибо!
@superdingo97412 ай бұрын
Не нужно игнорировать исключение. Там же что-то произошло, а мы это просто скрыли. За такое сразу можно указывать на дверь.
@intivi5277Ай бұрын
Как же это убого выглядит по сравнению с asm/c ! Программирование классов. Тьфу! Мир свернул куда-то не туда.