Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
Поэтому,
lock помогает писать стабильный и предсказуемый многопоточный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🤝5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Этот репозиторий собрал в одном месте огромное количество полезных материалов по .NET. Удобно, что всё структурировано и разбито по темам, поэтому можно использовать его как для изучения, так и как справочник в работе. Особенно полезен тем, кто хочет разобраться в экосистеме .NET, закрыть пробелы в знаниях и лучше понимать, какие технологии и подходы используются в разработке.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥6👍3
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Telegram
Твой пет проект
Канал про то, как создать свой маленький свечной заводик
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Фильтруем пользователей по домену email через LINQ!
Допустим, у нас есть список пользователей, и нужно достать только email-адреса на gmail.com.
Создадим простую модель:
Подготовим данные:
Можно пройтись циклом и вручную собрать результат:
Но через LINQ это читается короче:
Select достаёт из пользователя только email.
Where оставляет адреса с нужным доменом.
В результате получим:
Такой подход удобно использовать для фильтрации клиентов, подписчиков, заявок, логов, доменов, тегов и любых списков объектов.
Если регистр может отличаться, лучше явно указать сравнение:
Select() + Where() это удобная связка LINQ, когда нужно достать поле и отфильтровать его по условию.
➡️ C# Ready | #практика
Допустим, у нас есть список пользователей, и нужно достать только email-адреса на gmail.com.
Создадим простую модель:
public record User(string Name, string Email);
Подготовим данные:
var users = new List<User>
{
new("Alex", "alex@gmail.com"),
new("Maria", "maria@company.com"),
new("Bob", "bob@gmail.com")
};
Можно пройтись циклом и вручную собрать результат:
var result = new List<string>();
foreach (var user in users)
{
if (user.Email.EndsWith("@gmail.com"))
{
result.Add(user.Email);
}
}
Но через LINQ это читается короче:
var result = users
.Select(user => user.Email)
.Where(email => email.EndsWith("@gmail.com"))
.ToList();
Select достаёт из пользователя только email.
Where оставляет адреса с нужным доменом.
В результате получим:
alex@gmail.com
bob@gmail.com
Такой подход удобно использовать для фильтрации клиентов, подписчиков, заявок, логов, доменов, тегов и любых списков объектов.
Если регистр может отличаться, лучше явно указать сравнение:
email.EndsWith(
"@gmail.com",
StringComparison.OrdinalIgnoreCase
)
Select() + Where() это удобная связка LINQ, когда нужно достать поле и отфильтровать его по условию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥3
Напоминалка по исключениям в C#!
Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.
На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.
На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Изоляция рунета произошла быстрее, чем ты думал
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
Loading …
██████████████] 99%
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
❤2😁2
Почему для времени события часто лучше DateTimeOffset, а не DateTime?
В C# часто пишут так:
Но DateTime.Now зависит от локального времени сервера.
Если приложение работает в разных часовых поясах, в Docker, в облаке или просто переезжает на другой сервер, это может привести к путанице.
Для моментов времени чаще удобнее использовать:
DateTimeOffset хранит не только дату и время, но и смещение относительно UTC.
Это делает значение понятнее при логах, событиях, API, заказах, платежах и аудите.
А для отображения пользователю время уже можно переводить в его часовой пояс отдельно.
Для хранения момента события DateTimeOffset.UtcNow часто безопаснее, чем DateTime.Now.
➡️ C# Ready | #совет
В C# часто пишут так:
var createdAt = DateTime.Now;
Но DateTime.Now зависит от локального времени сервера.
Если приложение работает в разных часовых поясах, в Docker, в облаке или просто переезжает на другой сервер, это может привести к путанице.
Для моментов времени чаще удобнее использовать:
var createdAt = DateTimeOffset.UtcNow;
DateTimeOffset хранит не только дату и время, но и смещение относительно UTC.
Это делает значение понятнее при логах, событиях, API, заказах, платежах и аудите.
А для отображения пользователю время уже можно переводить в его часовой пояс отдельно.
Для хранения момента события DateTimeOffset.UtcNow часто безопаснее, чем DateTime.Now.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥4