csharp_ci | Unsorted

Telegram-канал csharp_ci - C# (C Sharp) programming

18377

По всем вопросам- @haarrp C# - обучающий канал Senior C# разработчика. @ai_machinelearning_big_data - Machine learning @itchannels_telegram - 🔥лучшие ит-каналы @csharp_ci - C# академия @pythonlbooks- книги📚 Реестр РКН: https://clck.ru/3Fk3kb

Subscribe to a channel

C# (C Sharp) programming

🚀 Docker + .NET pro tip

Для .NET приложений используйте многоступенчатую сборку: сначала компилируем и публикуем, потом копируем только готовые бинарники в минимальный рантайм-образ.


# Этап сборки
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

# Этап финального образа
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

💡 Преимущества:

- минимальный размер финального контейнера,
- быстрый запуск без SDK, только рантайм,
- меньше уязвимостей благодаря облегчённому окружению.

@csharp_ci

Читать полностью…

C# (C Sharp) programming

🔐 Refresh Tokens в .NET: зачем они нужны?

Access tokens имеют ограниченный срок жизни и не подходят для долгосрочной авторизации. Именно поэтому вместе с ними используются refresh tokens.

💡 Как это работает:
1. Пользователь логинится с email и паролем.
2. Система проверяет учетные данные.
3. Генерируется пара токенов:
- Access Token — действует недолго, используется для запросов к API.
- Refresh Token — живет дольше и позволяет получить новый access token без повторного ввода логина и пароля.

📌 Код-пример на C#:


[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginUserDto loginUserDto)
{
IdentityUser? identityUser = await userManager.FindByEmailAsync(loginUserDto.Email);

if (identityUser == null ||
!await userManager.CheckPasswordAsync(identityUser, loginUserDto.Password))
{
return Unauthorized();
}

User? appUser = await context.Users
.FirstOrDefaultAsync(u => u.Id == Guid.Parse(identityUser.Id));

if (appUser == null)
{
return NotFound();
}

string accessToken = tokenProvider.GenerateAccessToken(appUser);
string refreshToken = tokenProvider.GenerateRefreshToken();

return Ok(new AuthResponseDto(accessToken, refreshToken));
}

Читать полностью…

C# (C Sharp) programming

💻 Хотите создавать мощные web-приложения с использованием C# ASP.NET Core?

Присоединяйтесь к курсу «C# ASP.NET Core разработчик» от OTUS и получите все необходимые навыки для успешной разработки! На курсе вы:
— Научитесь разрабатывать высоконагруженные API на GraphQL, gRPC и SignalR Core.
— Освоите JavaScript, ReactJS и интеграцию с ASP.NET Core.
— Примените Docker и Kubernetes и получите навыки работы с микросервисной архитектурой.

🔥 Программа курса обновляется с учетом актуальных требований рынка, а диплом OTUS ценится в ведущих IT-компаниях.

❗️Старт обучения совсем скоро! Пройдите короткое вступительное тестирование и получите скидку и запись трех топовых вебинара: https://otus.pw/l6bf/?erid=2W5zFJmfS1n

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

C# (C Sharp) programming

Станьте разработчиком нейро-сотрудников на Python и зарабатывайте от 150.000р в месяц 🔥🔥🔥

Мы научим вас создавать топовых нейро-сотрудников на базе GPT-4 Omni, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч ₽ в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч ₽ за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате

Что будет на интенсиве?
🧬 Теория: как создаются нейро-сотрудники с GPT-4o на Python
🧬 Практика: мы создадим нейро-консультанта, нейро-HR, нейро-маркетолога и др.

Ведущий интенсива - Senior AI разработчик нейросетей и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайший четверг!

Читать полностью…

C# (C Sharp) programming

🌐 TouchSocket — .NET-фреймворк для тех, кто устал бороться с сетевыми протоколами

Если вы когда-нибудь сталкивались с проблемами TCP-пакетов, то этот проект может стать спасением. Он предлагает готовые решения для работы с TCP, UDP, SSL и даже Modbus, причём с неожиданно простым API.

Адаптеры пакетов в фрейморке позволяют на лету менять логику парсинга — от фиксированных заголовков до сложных HTTP-запросов. Встроенный механизм переподключения избавляет от вечного копипаста boilerplate-кода. При этом инструмент одинаково хорошо работает и в консольных приложениях, и в Unity, сохраняя при этом впечатляющую производительность.

🤖 GitHub

@csharp_ci

Читать полностью…

C# (C Sharp) programming

🧰 .NET Community Toolkit — полезная коллекция библиотек и API для .NET-разработчиков, созданная Microsoft и поддерживаемая сообществом. Этот набор инструментов не привязан к конкретному UI-фреймворку, а значит, его можно использовать в любых проектах — от десктопных приложений до веб-решений.

Среди ключевых компонентов — CommunityToolkit.Mvvm (облегченная MVVM-библиотека, наследник MvvmLight), CommunityToolkit.HighPerformance (оптимизации для работы с памятью и многопоточностью) и CommunityToolkit.Diagnostics (удобные методы валидации). При этом все инструменты уже применяются в реальных продуктах Microsoft, включая новый Microsoft Store.

Разработчики могут легко подключить NuGet-пакеты через Visual Studio, а документация доступна на Microsoft Docs. Планы по развитию публикуются в Roadmap, а для тестирования новых функций можно подключить пререлизные сборки.

🤖 GitHub

Читать полностью…

C# (C Sharp) programming

🛢️ ELSA 3 — библиотека для создания и выполнения рабочих процессов в .NET-приложениях с поддержкой C#, JSON и визуального дизайнера.

Проект позволяет разрабатывать как короткие, так и долгосрочные workflows. Включает сервер, студию для визуального проектирования и интеграцию с Docker. Поддерживает .NET 6+, параллельное выполнение задач и работу с внешними системами.

🤖 GitHub

@csharp_ci

Читать полностью…

C# (C Sharp) programming

#ПятничныйКвиз #ДляСамыхМаленьких

Читать полностью…

C# (C Sharp) programming

Что если за один вечер успеть прокачать скилы у пирса, вдохновиться новыми идеями за мороженым и отдохнуть под DJ-сет на закате?

GoSharp Weekend от Ozon Tech — летняя перезагрузка для тех, кто пишет на Go и C#.

Эксперты команд backend-разработки Ozon Tech поделятся внутренними исследованиями и инструментами оптимизации, которые уже доказали эффективность в продакшене.

Подавай заявку и жди приглашения!

Читать полностью…

C# (C Sharp) programming

🌀 Try .NET — интерактивная среда для работы с .NET прямо в браузере. Проект позволяет запускать и редактировать C#-код в интерактивных документах и учебных материалах, что особенно полезно для обучающих платформ вроде Microsoft Learn.

С помощью dotnet try можно превращать обычные Markdown-файлы в интерактивные руководства с исполняемыми примерами кода. Интеграция с Blazor дает возможность создавать подобный опыт прямо на веб-страницах без необходимости локальной установки SDK.

🤖 GitHub

@csharp_ci

Читать полностью…

C# (C Sharp) programming

🚀В открытый доступ выкатили Matrix-Game 2.0 — это открытая модель генерации мира, аналог Genie 3

Эта модели умеет генерировать виртуальные и интерактивные 3D-миры в реальном времени (25fps) и при этом работать пару минут без потери контекста.

Вы можете дать ему любое изображение в качестве отправной точки для создания мира: фото из старого альбома, картину, кадр из фильма.

Huggingface тут.
Репозиторий с примерами здесь.

Читать полностью…

C# (C Sharp) programming

🧩 Как собрать приложение Playground: React + .NET Aspire

Если вы хотите быстро создать SPA на React (через Vite) вместе с backend’ом на ASP.NET Core, .NET Aspire делает это очень просто.

➡️ Новый пример на GitHub показывает, как интегрировать React-приложение и ASP.NET Core API в единую .NET Aspire‑архитектуру.

Что внутри:

- AspireJavaScript.AppHost — проект‑оркестратор на .NET Aspire
- AspireJavaScript.MinimalApi — API на ASP.NET Core (возвращает тестовые данные)
- AspireJavaScript.React — фронтенд на React (Vite), потребляющий API
- Также есть варианты на Angular и Vue

⚙️ Преимущества:

- Авто‑конфигурация сервисов и портов через Aspire Dashboard
- Простое связывание frontend/backend без ручной настройки
- Visual Studio или CLI (dotnet run) запускают всю систему сразу

Для запуска понадобится:

- .NET 8 SDK (или новее), Node.js (≥ 20.x), Docker Desktop/Podman
- В каждом клиентском (React/Angular/Vue) каталоге выполнить npm install, затем запустить через Aspire

📦 Структура запуска:


# из папки с AppHost
dotnet run
# откроется Aspire Dashboard
# через него можно перейти в React‑frontend, вызвав API


🧠 Почему это круто:

- Работает из коробки: сервисы стартуют, обнаруживают друг друга и логируются в едином UI
- Полная изоляция: конфигурации, порты, переменные окружения управляются централизованно
- Пресеты шаблонов облегчают настройку и отладку

📌 Подробности

@react_tg

Читать полностью…

C# (C Sharp) programming

Как выбрать стэк для ML-задач на соревнованиях?

Разбираемся на примере E-CUP 2025 от Ozon Tech. В новой статье собрали рабочие инструменты для решения типичных заданий по машинному обучению:
1️⃣ Рекомендации: предсказание следующей покупки пользователя.
2️⃣ Логистика: автопланирование курьеров.
3️⃣ Контроль качества: автоматическое выявление поддельных товаров.

Эти задачи предстоит решить на E-CUP 2025. Регистрация открыта до 17 августа включительно

Статья поможет разобраться, какие инструменты из богатой экосистемы open-source проектов лучше использовать на соревновании:
🔹 Библиотеки и фреймворки для построения рекомендательных систем и маршрутизации.
🔹 Градиентный бустинг и графовые нейросети.
🔹 Оптимизация маршрутов и работа с геоданными.
🔹 Поиск аномалий и дефектов, работа с мультимодальными данными.

Если вы участвуете в соревновании или просто ищете надежный стэк для ML-прототипов — читайте и сохраняйте: https://cnrlink.com/ecup25articlecsharp

Читать полностью…

C# (C Sharp) programming

🔍 NetSonar — инструмент для сетевой диагностики от sn4k3

NetSonar — это лёгкая и кроссплатформенная утилита, которая помогает диагностировать сеть, визуализировать данные и управлять сетевыми интерфейсами.

🧰 Возможности:
• Многопротокольные пинги: ICMP, TCP, UDP и HTTP — проверка доступности и измерение задержек
• Управление интерфейсами: просмотр IP‑конфигураций, статистики и управление адаптерами в реальном времени
• Сканирование сети: обнаружение устройств, подсетей и открытых портов
• Современный UI: интерфейс на Avalonia + SukiUI с тёмной темой и графиками
• Кроссплатформенность: работает на Windows, macOS и Linux (на базе .NET)
• Открытый код: лицензия AGPL‑3.0 — можно адаптировать и дорабатывать

🛠 Установка:
🔹 Windows:


🖥 Github

Читать полностью…

C# (C Sharp) programming

🖇️ MongoDB C# Driver — официальный .NET-клиент для работы с MongoDB, который превращает взаимодействие с документной БД в удобный типизованный код. Проект поддерживает как динамические BsonDocument, так и строгую типизацию через POCO-классы, сохраняя при этом все преимущества NoSQL.

Интересно реализована LINQ-поддержка: можно писать привычные для C#-разработчика запросы вида collection.Find(x => x.Name == "Jack"), которые под капотом транслируются в MongoDB-операции. Подходит для всего — от быстрых прототипов до enterprise-решений с асинхронными операциями.

🤖 GitHub

@csharp_ci

Читать полностью…

C# (C Sharp) programming

⚡ ASP.NET Core: Глобальный обработчик исключений

Красивый и лаконичный пример реализации IExceptionHandler в .NET 8+ через switch`-выражение и сервис `IProblemDetailsService.


internal sealed class GlobalExceptionHandler(
IProblemDetailsService problemDetailsService,
ILogger<GlobalExceptionHandler> logger) : IExceptionHandler
{
public async ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken)
{
logger.LogError(exception, "Unhandled exception occurred");

httpContext.Response.StatusCode = exception switch
{
ApplicationException => StatusCodes.Status400BadRequest,
_ => StatusCodes.Status500InternalServerError
};

return await problemDetailsService.TryWriteAsync(new ProblemDetailsContext
{
HttpContext = httpContext,
Exception = exception,
ProblemDetails = new ProblemDetails
{
Type = exception.GetType().Name,
Title = "An error occured",
Detail = exception.Message
}
});
}
}

📌 Что тут важно:

- switch по типу исключения для назначения статуса ответа
- IProblemDetailsService для единообразного формирования ответа
- Логгирование всех необработанных ошибок

🔥 Такой подход делает код чище, централизует обработку ошибок и избавляет от дублирования в middleware.

Читать полностью…

C# (C Sharp) programming

🚀 Изучаешь ASP.NET Core?

Репозиторий — это 400+ готовых примеров, от Minimal API до Blazor и SignalR.

Все версии .NET Core — от 2.1 до 10 Preview.
Запуск одним dotnet watch run.

⭐ 10k+ звёзд на GitHub, must-have для практики!

https://github.com/dodyg/practical-aspnetcore

Читать полностью…

C# (C Sharp) programming

🎭 Dialogue Manager для Godot — интересный аддон для Godot 4.4+, который упрощает работу с диалогами в играх. Он позволяет писать ветвящиеся диалоги в сценарном стиле без сохранения состояния.

Проект предлагает удобный редактор диалогов и систему их интеграции в игру. Есть поддержка условий, мутаций, портретов персонажей и даже перевода текстов. Установка доступна через Godot Asset Library или напрямую с GitHub.

В документации можно найти примеры использования для разных жанров, от визуальных новелл до RPG с репликами в speech bubbles. Автор также делится видео-гайдами по настройке диалоговых сцен.

🤖 GitHub

@csharp_ci

Читать полностью…

C# (C Sharp) programming

Каждый раз когда я ввожу dotent в терминал

@csharp_ci

Читать полностью…

C# (C Sharp) programming

Ваши .NET проекты превратились в спагетти-код — пора перейти к Clean Architecture

Пока одни разработчики продолжают страдать с legacy-кодом, другие применяют Clean Architecture и создают гибкие, тестируемые приложения. Виктор Дзицкий покажет эволюционный путь от классической многослойной архитектуры к современным принципам проектирования.

Вебинар «От N-Layer к Clean Architecture: эволюция проектирования .NET приложений» в рамках курса «C# Developer. Professional»

→ 27 августа, 20:00

Программа:

→ Сравнение подходов: классическая N-Layer vs современная Clean Architecture
→ Принцип инверсии зависимостей (DIP) и Dependency Injection как основа трансформации
→ Практическая демонстрация: как реорганизовать N-Layer проект в Clean Architecture
→ Достижение независимости бизнес-логики от инфраструктуры

Бесплатная регистрация — превратите хаос в порядок: https://otus.pw/XsqOB/?erid=2W5zFJBvCue

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

C# (C Sharp) programming

ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2025 ГОДУ? 🚀

Чтобы стать Senior C# разработчиком сегодня, нужно не только знать язык программирования и фреймворки. Нужно уметь строить гибкую архитектуру приложения, которую легко тестировать и менять под задачи бизнеса. Стань экспертом в построении гибкой архитектуры приложения!

👉 Стартуем 25 августа.

Курс ведет действующий архитектор и Principal Engineer Кирилл Ветчинкин.

Что будет на курсе:
✅ Создадим полноценный микросервис
✅ Разберем все тактические паттерны DDD
✅ Реализуем Use Case и Domain Service
✅ Напишем много тестов
✅ Реализуем HTTP, gRPC и Kafka адаптеры

Полная программа ТУТ 👉 https://microarch.ru/courses/ddd?utm_source=posev&amp;utm_medium=erid:2Vtzqx3DxfU&amp;utm_campaign=2

А главное — ты с нуля разработаешь и запустишь микросервис, который максимально приближен к реальности "Диспетчеризация заказов на курьеров". Это будет крутым проектом в портфолио или основой для рабочих задач.

А еще:
— Проверим все домашки
— Поддержим в чате
— Проведем живые разборы
— Ответим на все вопросы

🔥 Не откладывай свой рост на потом: https://microarch.ru/courses/ddd?utm_source=posev&amp;utm_medium=erid:2Vtzqx3DxfU&amp;utm_campaign=2

Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqx3DxfU

Читать полностью…

C# (C Sharp) programming

⚙️ Микросервисы начинают тормозить под нагрузкой?

💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire.

На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем:
◽️ Ограничения классических микросервисов при высокой нагрузке.
◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing.
◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB.
◽️ Конфигурацию проекций для чтения данных.

❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий.

➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://otus.pw/EXJF/?erid=2W5zFJkMBYc

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

C# (C Sharp) programming

🧼 Как писать чистый и тестируемый middleware в ASP.NET Core

Самый простой способ — сделать его строго типизированным.

📦 Что нужно:
1. Создай класс, который реализует IMiddleware
2. Помести всю логику в InvokeAsync(...)

Но не забудь два важных шага:

✅ Зарегистрируй middleware в DI-контейнере:
services.AddTransient<YourMiddleware>();

✅ Добавь его в пайплайн:
app.UseMiddleware<YourMiddleware>();

🎯 Такой подход:
- делает middleware переиспользуемым
- учитывает область действия зависимостей (scoped)
- и позволяет легко покрыть тестами

Идеально, если хочешь поддерживаемый и чистый код.

Читать полностью…

C# (C Sharp) programming

⚡ Не сравнивай строки через .ToLower()

Плохая практика:


bool equal = stringA.ToLower() == stringB.ToLower();


❌ Медленно (каждый раз создаёт новые строки)
❌ Лишние аллокации памяти

Правильный способ:


bool equal = string.Equals(stringA, stringB, StringComparison.OrdinalIgnoreCase);

✅ Без лишних аллокаций
✅ Намного быстрее
✅ Чёткий контроль над правилами сравнения

📊 Бенчмарки:


.ToLower() → ~38 ns

.ToUpper() → ~50 ns

string.Equals(..., OrdinalIgnoreCase) → ~0.003 ns 🚀

Читать полностью…

C# (C Sharp) programming

Ваши коллеги уже изучают .NET 10 → а вы готовы остаться на старых версиях?

Каждый релиз .NET приносит десятки нововведений, которые меняют подходы к разработке. Пока одни программисты осваивают новый синтаксис C# 14 и возможности runtime, другие продолжают писать код «по-старому» и удивляются, почему их решения выглядят устаревшими.

.NET 10 — это не просто очередное обновление. Это LTS-версия, которая задаст стандарты разработки на ближайшие годы. Новый синтаксический сахар, field и extension в C# 14, обновления в MAUI и EF Core — всё это уже меняет то, как пишут современные приложения.

Вебинар «Что нового в .NET 10 для разработчиков» в рамках курса «C# углубленный»

→ 18 августа, 20:00

→ Антон Герасименко

Программа:

→ Обзор ключевых нововведений .NET 10 и их практическое применение
→ Синтаксические конструкции C# 14: сахар, field, extension
→ Изменения в runtime и их влияние на производительность приложений 
→ Новые возможности MAUI и EF Core для современной разработки

После вебинара вы поймёте, как адаптировать свой код под новые стандарты, сможете читать и писать современный C# код и не будете отставать от коллег, которые уже перешли на актуальные версии.

Бесплатная регистрация — займите место в числе первых: https://otus.pw/dmGS/?erid=2W5zFHRBTUk

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

C# (C Sharp) programming

🗂 SimpleFolderIcon

Полезный инструмент, который поможет кастомизировать цвет и метку значка ваших папок в браузере проектов Unity.

➡️ GitHub

Читать полностью…

C# (C Sharp) programming

🔥 Одна из дучших фишек в ASP.NET Core 10 — Server-Sent Events (SSE)

Теперь можно реализовать real-time обновления без SignalR и WebSockets. SSE — это лёгкий способ стримить данные с сервера на клиент *в одну сторону*, идеально для простых задач.

📡 Зачем это нужно?

В .NET-приложениях часто нужно передавать обновления с backend на frontend. Есть несколько способов:

• Polling — клиент всё время спрашивает: «что нового?» (нагружает сервер)
• SignalR — bidirectional WebSockets, но избыточно для простых стримов
• SSE — простой и нативный способ отправлять обновления *односторонне*

Теперь SSE доступен прямо в .NET 10 (preview) и легко интегрируется с Minimal APIs.

🧠 Что сегодня показали:
— Как работает SSE и чем отличается от SignalR
— Как реализовать SSE endpoint с Minimal API
— Как тестировать SSE-поток из IDE (HTTP request file)
— Как собрать frontend для отображения стриминга
— И как создать *живой рынок акций* на SSE — от бэкенда до клиента

👨‍💻 Отличная альтернатива, если нужно real-time, но без всей сложности WebSockets.

#dotnet #aspnetcore #SSE #ServerSentEvents #SignalR #realtime #webdev

Читать полностью…

C# (C Sharp) programming

#ПятничныйКвиз #ЭтоВамНеJS

Читать полностью…

C# (C Sharp) programming

На E-CODE одно из фокусных направлений — C#. Доклады экспертов на главном IT-событии осени будут в треке Backend 💙

Заходите смотреть программу и регистрироваться — места улетают стремительно.

Успех ждёт middle+ инженеров — команда Ozon Tech собирает в пространстве E-CODE профессиональное комьюнити. Общаться, меняться опытом и контактами, находить идеи и своё место в этом большом мире IT.

Или хотя бы у сцены — в лайнапе E-CODE НТР, Заточка, ILWT и Нейромонах Феофан.
E-CODE — событие, на котором вам стоит побывать.

Зарегистрироваться ⬅

Читать полностью…

C# (C Sharp) programming

🔥 Малоизвестная, но мощная фича в C# — System.Threading.Channels

Если ты всё ещё используешь Queue<T>, BlockingCollection<T> или ConcurrentQueue<T> для передачи данных — пора перейти на новый уровень.

💡 Channels — это современная реализация паттерна producer-consumer:
– без жёсткой связности между компонентами
– с полной поддержкой async/await
– с высокой пропускной способностью

📌 Каналы позволяют безопасно и эффективно передавать данные между частями приложения, особенно в асинхронных пайплайнах.

Есть два типа:
– UnboundedChannel — без лимита, но риск захламления памяти
– BoundedChannel — с ограничением, идеально для управления нагрузкой

⚙️ Используй Channel<T> вместо старых коллекций — и получи масштабируемую, надёжную архитектуру.

@csharp_ci

Читать полностью…
Subscribe to a channel