Разбор самой популярной задачи с собеседования в OZON | .NET Backend C# | Senior Middle
ฝัง
- เผยแพร่เมื่อ 25 ก.ย. 2024
- Актуальную информацию по собеседованиям и другие материалы, вы всегда можете найти в ТГ: t.me/dannylogs
Код конвенции от Майкрософт:
learn.microsof...
learn.microsof...
Буду безмерно балогодарен за лайк и комментарий ⸜(。˃ ᵕ ˂ )⸝♡
monitor.Enter/Exit вместо lock иам используется для того, чтобы компилятор не ругался на вызов await внутри. То есть здесь таким грубым способом обходят запрет на await внутри блока синхронизации монитора. И это также важно упомянуть, поскольку так делать нельзя из-за того, что до мы взодим в монитор из одного потока, а выйти можем из другого (после await)
Очень хороший контент. Продолжай так делать, так как на ютубе мало контента где разбирается оптимизация кода, и думаю ты его сможешь грамотно провести. Именно брать куски кода, провести ревью и указать что и как лучше будет сделать
Вот это классная задача для собеса. А не эти задачи по типу - что выведет этот код или напиши функцию сортировки какую нибудь
ещё момент: нельзя эвейтить между Monitor.Enter и Exit, т.к. монитор требует одного и того же потока на открытие и закрытие, в то время как async await такое не гарантирует
тоже хотел сказать об этом, при наличии async/await для синхронизации обычно используется SemaphoreSlim
@@hhgforfhuv Точно, все таки забыл что-то)
Ну и если бы была гарантия, что await продолжает код в том же потоке (там не .ConfigureAwait(false), что вроде-как подразумевает, что код вызывается из UI thread), Monitor.Enter блокировал бы конкурирующие потоки на время ожидания в await, "выводя" их на это время из пула. Что эффективно делает асинхронный код синхронным (т.к. он требует ровно того же кол-ва потоков, что эквивалентный код без async/await).
По этой же причине lock там нельзя использовать. И этого не позволит компилятор.
у меня такая же задача на собесе была, подтверждаю
Не нужно игнорировать исключение. Там же что-то произошло, а мы это просто скрыли. За такое сразу можно указывать на дверь.
через фабрику можно инжектить сервисы