🔥18❤6👍3
В этой статье:
• Какие пакеты реально экономят время в типовых задачах.
• Где пакет уместен в проде, а где лучше остаться на стандартном API.
• Как оценивать риски новой зависимости перед подключением.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥5👎2
Почему async void приводит к потерянным ошибкам?
Иногда хочется быстро сделать асинхронный метод и поставить
Поэтому баги всплывают позже и разбор занимает больше времени.
Вот как обычно выглядит такая ситуация:
Проблема в том, что при
Надёжнее вернуть
Теперь поведение предсказуемо. Ты сразу видишь точку ошибки и можешь обработать её в нужном месте.
🔥 В обычном коде используйте
➡️ C# Ready | #практика
Иногда хочется быстро сделать асинхронный метод и поставить
async void. Сначала всё выглядит нормально, но при ошибке вызывающий код уже не может корректно обработать исключение.Поэтому баги всплывают позже и разбор занимает больше времени.
Вот как обычно выглядит такая ситуация:
static async void ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}
ProcessOrderAsync(42);
Console.WriteLine("Дальше код идёт как будто всё хорошо");
Проблема в том, что при
async void вызывающий код не может дождаться завершения метода. По этой причине ошибка теряет контекст и в логах часто выглядит случайной.Надёжнее вернуть
Task и явно дождаться выполнения:static async Task ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}
try
{
await ProcessOrderAsync(42);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Теперь поведение предсказуемо. Ты сразу видишь точку ошибки и можешь обработать её в нужном месте.
async Task. async void оставляйте только для обработчиков событий.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🔥6
Как убрать «лес» вложенных `if` из метода?
Часто вся валидация и проверки прав зашиваются внутрь одной большой конструкции, и тело метода уезжает вправо на пол-экрана:
С guard-условиями (ранними выходами) проверки поднимаем в начало, а дальше оставляем только «нормальный путь»:
Метод читается сверху вниз как список требований, а основная логика не утопает во вложениях. Такой подход хорошо заходит для валидаций, проверок прав, preconditions в сервисах и хендлерах.
🔥 Меньше вложенности, легче читать диффы и гораздо проще добавлять новые условия.
➡️ C# Ready | #совет
Часто вся валидация и проверки прав зашиваются внутрь одной большой конструкции, и тело метода уезжает вправо на пол-экрана:
void ProcessOrder(Order order)
{
if (order != null)
{
if (order.IsPaid)
{
if (!order.IsCancelled)
{
Ship(order);
}
}
}
}
С guard-условиями (ранними выходами) проверки поднимаем в начало, а дальше оставляем только «нормальный путь»:
void ProcessOrder(Order order)
{
if (order is null) return;
if (!order.IsPaid) return;
if (order.IsCancelled) return;
Ship(order);
}
Метод читается сверху вниз как список требований, а основная логика не утопает во вложениях. Такой подход хорошо заходит для валидаций, проверок прав, preconditions в сервисах и хендлерах.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤33🔥8🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Технический блог от опытного
.NET разработчика и Microsoft MVP, где автор делится глубокими практическими заметками, гайдами и идеями по современному разработку с ASP.NET Core, C#, .NET Core/NET 10 и связанным инструментам.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4👍4
QuestPDF создаёт аккуратный счёт из ваших данных, избавляя команду от редакторов и копипаста ручного труда.
Что важно знать
• Меняет стиль легко
• Работает на любом компьютере
• Создаёт файл мгновенно
Подключите пакет, скопируйте шаблон и уже сегодня отправляйте клиентам профессиональные, читаемые счета в PDF формате.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🤝11👍4🔥2
await using — асинхронно освобождаем ресурсы без лишних try/finally!
Часто мы открываем файлы или сетевые стримы асинхронно, но… освобождаем синхронно, блокируя поток. В .NET есть решение: интерфейс
Старая реализация закрывает поток синхронно, заставляя поток ожидать завершения операции, и нагружает планировщик лишними блокировками:
Новая версия использует await using, освобождая ресурсы асинхронно без блокировок и шаблонного кода при завершении:
🔥
➡️ C# Ready | #практика
Часто мы открываем файлы или сетевые стримы асинхронно, но… освобождаем синхронно, блокируя поток. В .NET есть решение: интерфейс
IAsyncDisposable и ключевое слово await using — всё по-современному и без ручного DisposeAsync().Старая реализация закрывает поток синхронно, заставляя поток ожидать завершения операции, и нагружает планировщик лишними блокировками:
// Было — синхронный Dispose
async Task<long> Old(string p)
{
var s = new FileStream(p, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
try { return s.Length; }
finally { s.Dispose(); } // блокирует поток
}
Новая версия использует await using, освобождая ресурсы асинхронно без блокировок и шаблонного кода при завершении:
// Стало — await using + DisposeAsync
async Task<long> New(string p)
{
await using var s = new FileStream(p, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
return s.Length; // всё асинхронно и лаконично
}
await using автоматически вызывает DisposeAsync() без блокировок и лишнего кода — особенно важно в высоконагруженных сервисах и UI-приложениях.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🔥9👍5
❤9🔥4👍3
Каналы с Junior IT вакансиями
и стажировками
Подписывайся и забирай свой оффер
1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. ИИ-ассистент для автооткликов
5. IT стажировки и волонтерства
6. IT стажировки в топовых компаниях мира
7. Удалённые IT вакансии и стажировки
8. Python вакансии и стажировки
9. БИГТЕХ вакансии и стажировки
10. Design вакансии и стажировки
11. QA вакансии и стажировки
12. Junior вакансии и стажировки
13. Frontend вакансии и вопросы собесов
14. Вакансии и стажировки для аналитиков
15. Вакансии в русских стартапах за границей
16. Вакансии и стажировки для DevOps
17. Вакансии, которых нет на ХХ.РУ
Please open Telegram to view this post
VIEW IN TELEGRAM
👎3🔥3❤1
Почему using и await using дают разный результат?
На вид разница только в одном слове. Но поведение разное.
Если случайно оставить обычный
🔥 Для
➡️ C# Ready | #совет
На вид разница только в одном слове. Но поведение разное.
using вызывает синхронный Dispose. await using вызывает DisposeAsync и ждет его завершения. Если у ресурса есть реальная асинхронная очистка, например сетевой flush или закрытие канала, это критично.Если случайно оставить обычный
using, код может выглядеть корректно, но фактическое освобождение пройдет не так, как ты ожидаешь.await using var conn = new SqlConnection(cs);
await conn.OpenAsync();
IAsyncDisposable используй await using, чтобы очистка завершалась предсказуемо.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4❤3
Например, HTTP передаёт данные в открытом виде, без шифрования. HTTPS работает поверх TLS и защищает соединение: выполняется проверка сертификата, обмен ключами и дальнейшая передача данных в зашифрованном виде.
На картинке — ключевые этапы установления соединения.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍6🔥5
Скачал C#, открыл IDE, закрыл IDE 🥲
Знакомо? Скачал Visual Studio (или VS Code, или Rider), установил, открыл - а там интерфейс, от которого глаза разбегаются. Куда нажимать? Где писать код? Как проект создать?
⁉️ Дальше начинаются метания: "какую IDE выбрать?", "почему не компилируется?", "где тут вообще что?". В итоге вместо программирования - гуглеж и настройка окружения на полдня.
❇️ Ребята из Merion Academy (того самого YouTube-канала про IT) знают эту боль. Поэтому на бесплатных вводных уроках по C# дают готовые настройки.
Что внутри:
✔️ Установка и настройка IDE - разбираем Visual Studio, VS Code и Rider.
✔️ Обзор языка C# - особенности, синтаксис, типичные ошибки.
✔️ Практическое задание - пишешь код и видишь результат сразу.
✔️ Тест - проверяешь, все ли понял.
➡️ Запишись на бесплатные вводные уроки
Первый код напишешь сразу, без головной боли с установкой.
Знакомо? Скачал Visual Studio (или VS Code, или Rider), установил, открыл - а там интерфейс, от которого глаза разбегаются. Куда нажимать? Где писать код? Как проект создать?
⁉️ Дальше начинаются метания: "какую IDE выбрать?", "почему не компилируется?", "где тут вообще что?". В итоге вместо программирования - гуглеж и настройка окружения на полдня.
❇️ Ребята из Merion Academy (того самого YouTube-канала про IT) знают эту боль. Поэтому на бесплатных вводных уроках по C# дают готовые настройки.
Что внутри:
✔️ Установка и настройка IDE - разбираем Visual Studio, VS Code и Rider.
✔️ Обзор языка C# - особенности, синтаксис, типичные ошибки.
✔️ Практическое задание - пишешь код и видишь результат сразу.
✔️ Тест - проверяешь, все ли понял.
➡️ Запишись на бесплатные вводные уроки
Первый код напишешь сразу, без головной боли с установкой.
Merion Academy
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
😁2
Если камера обновляется не в том цикле, картинка начинает дергаться, и даже хорошая физика выглядит плохо.
В этом гайде:
• Показываем, почему появляется дрожание при разных циклах обновления;
• Переносим камеру в LateUpdate, чтобы она читала финальную позицию цели;
• Добавляем SmoothDamp и Interpolate для мягкого и стабильного слежения.
Настрой этот пайплайн один раз, и камера сразу станет заметно спокойнее в геймплее.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍7❤6🤝4👎1