C
C# Ready | Unity
17.07.2026 11:12 · 👁 560
Понятный разбор того, как на самом деле работает async/await в C#!
В этой статье:
• Чем асинхронность отличается от запуска работы в отдельном потоке
• Когда await освобождает поток, а когда выполнение продолжается синхронно
• Как компилятор превращает асинхронный метод в машину состояний
Продолжай читать на Habr!
➡️ C# Ready | #статья
C
C# Ready | Unity
17.07.2026 09:12 · 👁 635
Пачку офферов заказывали?
О всех трудоустройствах через ИИ-ассистента Софи ребята узнают от пользователей.
И какой же кайф, когда они делятся своими историями.
Вот так в чате узнали сразу о трех новых офферах:
• Кейс Сергея - 2 недели в Софи и 2 оффера.
• Кейс Елены - 1 неделя в Софи и оффер спустя 10 лет перерыва в работе. Елене 52 года.
• Кейс Юлии - 1 месяц в Софи, свитчер из финансового аналитика в разработчика SQL. И еще один оффер🎉
Искренние поздравления ребятам и удачи им на новой работе!
В следующий раз доступ в Софи откроется уже 21 июля.
Если хочешь получить 3 дня бесплатного доступа - подписывайся на этот канал, все анонсы будут там.
C
C# Ready | Unity
16.07.2026 18:17 · 👁 782
👩💻 Сегодня рассмотрим Channel<T> — безопасная асинхронная очередь задач в .NET
Это потокобезопасная очередь для передачи сообщений между задачами без ручных блокировок и сложной синхронизации.
Что важно знать:
• Работает без ручных блокировок и сложных синхронных вызовов.
• Позволяет автоматически замедлять отправку при перегрузке памяти.
• Обеспечивает плавную передачу данных между параллельными задачами.
Так вы получаете готовый «из коробки» механизм асинхронной очереди с естественным управлением нагрузкой без лишнего кода.
➡ C# Ready | #гайд
C
C# Ready | Unity
16.07.2026 16:17 · 👁 799
«Снова в школу!» – звучит тревожно.
Но в магистратуре МИФИ и Школы 21 «Управление внедрением искусственного интеллекта в бизнес» совсем другая атмосфера: тут нет страха ошибки и ощущения, что зря тратишь время.
Зато есть рабочая среда, поддержка единомышленников и уверенность, что растёшь.
Что внутри программы:
— не просто алгоритмы, а живые сценарии – где применить ИИ, чтобы было лучше, быстрее, дешевле;
— учим внедрять ИИ для управления продуктом от технического задания до запуска;
— делаешь реальные проекты прямо во время учёбы, а не ближе к диплому;
— диплом государственного образца МИФИ – одного из ведущих технических университетов страны.
Подробности и заявка здесь
C
C# Ready | Unity
16.07.2026 12:12 · 👁 775
CancellationToken должен проходить через всю цепочку вызовов!
Само наличие CancellationToken в параметрах ещё не делает операцию отменяемой:
async Task SyncAsync(CancellationToken token)
{
var data = await LoadAsync();
await SaveAsync(data);
}
Если вложенные методы не получили токен, они продолжат работать даже после отмены запроса.
Токен нужно передавать во все операции, которые поддерживают отмену:
var data = await LoadAsync(token);
await SaveAsync(data, token);
await Task.Delay(500, token);
Для вычислений без await запрос отмены необходимо проверять вручную:
foreach (var item in items)
{
token.ThrowIfCancellationRequested();
Process(item);
}
Отмена в .NET кооперативная: Cancel() не останавливает код принудительно. Он только сообщает операциям, что работу следует завершить.
Для собственного таймаута можно создать источник отмены:
using var timeout = new CancellationTokenSource(
TimeSpan.FromSeconds(10)
);
await SyncAsync(timeout.Token);
Если одновременно нужен токен вызывающего кода и внутренний таймаут, их можно объединить:
using var linked = CancellationTokenSource
.CreateLinkedTokenSource(token, timeout.Token);
await SyncAsync(linked.Token);
Передавайте CancellationToken до самого нижнего отменяемого вызова, иначе API обещает отмену, но фактическая работа продолжается.
➡️ C# Ready | #совет
C
C# Ready | Unity
16.07.2026 10:12 · 👁 783
IT мероприятия 🤘
Всё самое интересное для карьеры в IT: митапы, хакатоны, конференции, стажировки и обучение.
Подписывайся 🤘
1. Москва
2. Санкт-Петербург
3. Для стажеров и студентов
C
C# Ready | Unity
16.07.2026 07:12 · 👁 919
Интересный разбор того, как сегодня создавать игры на C# без готового движка!
В этой статье:
• Почему C# подходит для небольших кроссплатформенных игр
• Как SDL3 закрывает окна, ввод, контроллеры и рендеринг
• Как организовать загрузку ассетов и собрать собственный редактор на Dear ImGui
Продолжай читать на Habr!
➡️ C# Ready | #статья
C
C# Ready | Unity
14.07.2026 11:12 · 👁 1.1K
Почему with у record не создаёт глубокую копию?
Выражение with удобно использовать для создания изменённой копии record:
var updated = user with
{
Name = "Alex"
};
Но копирование будет поверхностным. Сам record создаётся заново, а вложенные ссылочные объекты продолжают использоваться совместно.
Рассмотрим record со списком:
record User(
string Name,
List<string> Roles
);
Создадим его копию и изменим список:
var original = new User(
"Alex",
new() { "read" }
);
var copy = original with { };
copy.Roles.Add("write");
Изменение появится и в исходном объекте:
Console.WriteLine(
original.Roles.Count
);
// 2
Причина в том, что original.Roles и copy.Roles ссылаются на один экземпляр List<string>.
Если списки должны быть независимыми, скопируйте коллекцию явно:
var copy = original with
{
Roles = new List<string>(
original.Roles
)
};
Другой вариант использовать неизменяемые коллекции:
record User(
ImmutableArray<string> Roles
);
var copy = original with
{
Roles = original.Roles.Add("write")
};
Это касается не только списков, но также массивов, словарей и других изменяемых ссылочных объектов.
➡️ C# Ready | #совет
C
C# Ready | Unity
14.07.2026 07:12 · 👁 999
Шпаргалка по форматированию даты и времени в C#!
Например, dd.MM.yyyy выведет дату с числом, месяцем и годом, HH:mm покажет время в 24-часовом формате, а MMM и MMMM позволяют получить сокращённое или полное название месяца.
На картинке спецификаторы для дня, месяца, года, часов, минут, секунд, долей секунды, часового пояса и AM/PM. Для каждого варианта приведены готовый формат и пример результата.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
C
C# Ready | Unity
13.07.2026 16:12 · 👁 1K
Отправляем несколько HTTP-запросов параллельно на C#!
Если данные нужно получить из нескольких независимых источников, последовательные запросы заставят программу ждать каждый ответ по очереди.
Создадим HttpClient:
using var client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(10)
};
Запустим три запроса без немедленного ожидания результата:
Task<string> usersTask =
client.GetStringAsync(usersUrl);
Task<string> ordersTask =
client.GetStringAsync(ordersUrl);
Task<string> ratesTask =
client.GetStringAsync(ratesUrl);
Теперь все операции уже выполняются параллельно. Дождёмся завершения всей группы:
await Task.WhenAll(
usersTask,
ordersTask,
ratesTask
);
Получим готовые результаты:
string users = await usersTask;
string orders = await ordersTask;
string rates = await ratesTask;
Если каждый запрос занимает около секунды, последовательное выполнение продлится примерно три секунды, а параллельное около одной.
Добавим ограничение общего времени ожидания:
using var cts =
new CancellationTokenSource(
TimeSpan.FromSeconds(5)
);
Передадим токен отмены запросу:
string data = await client.GetStringAsync(
usersUrl,
cts.Token
);
Так приложение сможет прекратить операцию, если внешний сервис отвечает слишком долго.
➡️ C# Ready | #практика