TGViewer
Channel Public Channel
C# (C Sharp) programming

C# (C Sharp) programming

@csharp_ci

По всем вопросам- @notxxx1

Реестр РКН: https://clck.ru/3Fk3kb

#VRHSZ
Subscribers
18.1K
Photos
969
Videos
52
Links
774
Recent Posts 20 shown
Post #1883 1.29K
🧩 Задача на C#: почему воркер завис, хотя очередь почти пустая?

Есть канал вместимостью один элемент и единственный обработчик. Если задача завершилась ошибкой, обработчик возвращает её в очередь для повторной попытки.


using System.Threading.Channels;

var queue = Channel.CreateBounded<int>(
new BoundedChannelOptions(1)
{
FullMode = BoundedChannelFullMode.Wait,
SingleReader = true
});

await queue.Writer.WriteAsync(1);

var worker = Task.Run(async () =>
{
await foreach (var job in queue.Reader.ReadAllAsync())
{
Console.WriteLine($"Start {job}");

if (job == 1)
{
await queue.Writer.WriteAsync(2);
await queue.Writer.WriteAsync(1); // retry
}

Console.WriteLine($"Done {job}");
}
});

await worker;


Вопросы:

1. Что появится в консоли?
2. На какой строке остановится обработка?
3. Почему await и свободные потоки пула не спасают?
4. Если увеличить вместимость канала до двух, проблема исчезнет?
5. Как организовать не больше трёх попыток на задачу, сохранив ограниченную очередь и одного обработчика?

Условие: нельзя использовать Task.Run для каждой повторной попытки, неограниченную очередь или отбрасывание сообщений.

👇 Найдите причину зависания и предложите исправление.
Post #1881 2.43K
🔥 Microsoft выпустила .NET 11 RC1**- первый релиз-кандидат уже с **go-live support, то есть его можно использовать в production.

Из заметного: в C# 15 стабилизируют unions и другие новые возможности языка, ASP.NET Core получил обновления SignalR и OpenAPI, а в Blazor появились экспериментальные AI-компоненты для agentic UI.

В runtime добавили in-process crash reporting для Unix и аппаратные FP16-операции для Half. В SDK улучшили dotnet test, публикацию контейнеров и file-based programs, включая Native AOT reuse.

Также обновились F#, MAUI, WinForms, NuGet и MSBuild.

.NET 11 RC1 уже поддерживается в Visual Studio 2026 Insiders и VS Code с C# Dev Kit.

https://devblogs.microsoft.com/dotnet/dotnet-11-rc-1/
Post #1879 2.89K
C# 14: задача на Span без аллокаций

Дана строка:


42|john@example.com|127


Нужно распарсить её без Split(), Regex и временных string:


public readonly record struct UserLog(
int Id,
ReadOnlyMemory<char> Email,
int Latency
);


Реализуйте:


static bool TryParse(
ReadOnlyMemory<char> input,
out UserLog result
)


Требования:

• парсинг через Span<char>
• false при битом формате
• без лишних аллокаций
• Email должен ссылаться на исходный buffer

Пример:


var input = "42|john@example.com|127".AsMemory();

if (TryParse(input, out var log))
{
Console.WriteLine(log.Id); // 42
Console.WriteLine(log.Email); // john@example.com
Console.WriteLine(log.Latency); // 127
}


Вопрос:

почему нельзя сохранить ReadOnlySpan<char> в UserLog, а ReadOnlyMemory<char> можно?
Post #1876 2.95K
Unity подключила Claude Code, Codex и Grok к разработке игр 🎮

Компания опубликовала официальный плагин с 31 готовым скиллом для Unity 6+.

Агенту можно поручить конкретную задачу обычным текстом:

* создать экран настроек
* подключить внутриигровые покупки
* настроить физику или навигацию
* собрать мультиплеер и голосовой чат
* исправить проблемы со спрайтами
* настроить звук, локализацию, шейдеры и URP

Агент определяет нужную область Unity и загружает соответствующие инструкции. Плагин поддерживает Claude Code, Codex и Grok, устанавливается через их CLI и не содержит MCP-серверов или хуков.

https://github.com/Unity-Technologies/unity-agent-plugin#install
Post #1875 2.89K
🔍 Куда Copilot тратит токены и почему тормозит

Барт Вуллемс показал, как отслеживать работу GitHub Copilot через OpenTelemetry и Aspire Dashboard локально.

В панели можно увидеть:

* расход входных и выходных токенов;
* использование кеша промптов;
* длительность запросов к модели;
* вызовы инструментов и время их выполнения;
* какая модель фактически обработала запрос.

Каждый ход агента отображается как цепочка операций. Это помогает понять, где возникла задержка: при генерации ответа, чтении файла, выполнении команды или обращении к MCP-серверу.

В статье - запуск Dashboard, настройки Copilot Chat в VS Code и разбор трассировок. Запись текста промптов и ответов включается отдельно через captureContent.

Статья - https://bartwullems.blogspot.com/2026/09/monitoring-github-copilot-usage-with.html

#GitHubCopilot #Aspire #OpenTelemetry
Post #1873 2.79K
Запускать локальные LLM в .NET стало удивительно просто

Про AI в разработке обычно говорят в контексте написания кода, но в .NET нейросети уже можно достаточно легко встраивать прямо в приложения.

Через Microsoft.Extensions.AI и Ollama локальную модель можно подключить буквально несколькими строками.

Что можно собрать:

- обычный чат
- суммаризацию текста
- классификацию и категоризацию
- распознавание изображений
- свои AI-фичи без отправки данных во внешний API

Особенно интересно, что всё это можно запускать локально: модель работает на вашей машине, а приложение обращается к ней как к обычному сервису.

Примерно так:


builder.Services.AddChatClient(
new OllamaApiClient(
new Uri("http://localhost:11434"),
"phi3:mini"));


Дальше получаем IChatClient и используем его внутри обычного .NET-приложения.

Хороший разбор того, как работать с LLM в .NET через Microsoft.Extensions.AI:
Post #1871 3.87K
✔️ Polly становится платной, но у .NET остаётся бесплатная альтернатива

Polly много лет была одной из главных библиотек .NET для устойчивости к временным сбоям: retry, timeout, fallback, rate limiting и circuit breaker.

Теперь Polly движется в сторону платной модели, но Microsoft.Resilience по-прежнему можно использовать бесплатно.

С .NET 8 работа с resilience стала заметно проще: появился новый API Polly и официальные библиотеки Microsoft для построения resilience pipelines.

Что можно настроить:

- Retry
- Fallback
- Timeout
- Rate limiting
- Circuit breaker

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

https://milanjovanovic.tech/blog/building-resilient-cloud-applications-with-dotnet
Post #1870 2.72K
⚡ Refit - удобная альтернатива ручной работе с HttpClient в .NET

HttpClient отлично подходит для HTTP-запросов, но при неправильном использовании можно столкнуться с проблемами вроде исчерпания сокетов и некорректного обновления DNS. Плюс сериализацию и разбор ответов часто приходится писать вручную.

Refit упрощает это:

- описываешь REST API обычным C#-интерфейсом
- получаешь type-safe клиент
- сериализация и десериализация выполняются автоматически
- под капотом всё равно используется HttpClient

Удобно для проектов, где много внешних API и не хочется писать повторяющийся HTTP-код.

https://github.com/reactiveui/refit
Post #1868 3.47K
🧩 Как собрать Excel-подобную таблицу в .NET MAUI через Blazor Hybrid

В статье показывают, как встроить полноценный spreadsheet-интерфейс в .NET MAUI-приложение с помощью Blazor Hybrid.

Что получается:

- таблица в стиле Excel
- редактирование ячеек
- формулы и вычисления
- форматирование
- работа с листами
- импорт и экспорт Excel-файлов
- запуск в desktop/mobile-приложении на .NET MAUI

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

https://syncfusion.com/blogs/post/blazor-spreadsheet-dotnet-maui
Post #1867 3.01K
🚀 Microsoft показала, как переносить старые приложения с .NET Framework на .NET 10 прямо в Visual Studio с помощью GitHub Copilot.

Copilot теперь помогает пройти модернизацию по шагам:

- анализирует старый проект
- составляет план обновления
- показывает контрольные точки перед изменениями
- помогает переписывать несовместимые части
- сохраняет ход миграции в Markdown-файлах
- делает процесс прозрачнее и проще для проверки командой

Идея в том, чтобы превратить большой и рискованный апгрейд в последовательный сценарий, где разработчик видит, что именно меняется и почему.

Полезно для команд, которые годами откладывали переход со старого .NET Framework из-за объёма ручной работы.

https://devblogs.microsoft.com/visualstudio/today-i-will-modernize-a-net-application/
Post #1865 2.7K
⚡️ Как нормально работать с конфигурацией в .NET

Значения могут приходить из appsettings.json, environment variables, User Secrets и других configuration providers.

Можно читать их напрямую через IConfiguration, но такой код быстро становится хрупким и неудобным.

Вместо этого лучше использовать Options Pattern:

* создать класс настроек
* привязать его к секции конфигурации
* получать через IOptions<T>
* добавить валидацию через Data Annotations

Так конфигурация становится типизированной, проще тестируется и меньше ломается при рефакторинге.
Post #1863 2.9K
Как упростить работу с иерархическими данными в Blazor

Обычный DropDownList удобен для плоских списков, а TreeView хорошо показывает структуру, но занимает много места.

Telerik предлагает промежуточный вариант - DropDownTree.

Он позволяет выбирать элементы из дерева прямо внутри компактного dropdown:

* категории товаров
* структура компании
* файловая система
* регионы
* роли и permissions

Компонент поддерживает вложенные данные напрямую, поиск по дереву, раскрытие нужных узлов и отображение выбранного пути.

Пример:


<TelerikDropDownTree Data="@Data"
@bind-Value="@SelectedValue"
ValueField="TreeItemId"
Filterable="true">

<DropDownTreeBindings>
<DropDownTreeBinding TextField="Text"
ItemsField="Items" />
</DropDownTreeBindings>

</TelerikDropDownTree>


Главное преимущество - не нужно превращать сложную иерархию в огромный плоский список.

Если данные уже представлены как рекурсивный DTO, их часто можно передать компоненту практически напрямую.

Полезный вариант для Blazor-приложений, где пользователь должен выбирать что-то из большого дерева данных, но постоянно держать TreeView на экране нет смысла.

https://telerik.com/blogs/simplify-hierarchical-selection-blazor-telerik-dropdowntree

#aspnetcore #blazor
Post #1862 2.97K
Microsoft выпустила августовские servicing-обновления для .NET и .NET Framework

Обновления вышли 11 августа 2026 года и включают как security, так и non-security fixes.

Актуальные версии:

- .NET 10.0.11
- .NET 9.0.19
- .NET 8.0.30

В этом месяце Microsoft закрыла сразу несколько уязвимостей в .NET 8, 9 и 10, включая:

- Remote Code Execution
- Elevation of Privilege
- Information Disclosure
- Denial of Service
- Security Feature Bypass

Среди исправлений есть CVE-2026-70354 и CVE-2026-62897, связанные с удалённым выполнением кода.

Обновлены также:

- ASP.NET Core
- Entity Framework Core
- Runtime
- container images
- Linux packages

Для .NET Framework тоже вышли новые security и non-security updates.

Если приложение работает на .NET 8, 9 или 10, августовский servicing update лучше не откладывать, особенно из-за набора security fixes.

Подробнее:
https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-august-2026-servicing-updates/

#aspnetcore #dotnet
Post #1860 3.13K
🚀 .NET 8: как сделать микросервисы устойчивыми с Resilience Pipelines + DI

В распределённых системах ошибки — это не исключение, а реальность:

❌ API временно недоступен
❌ сеть дала сбой
❌ сервис перегружен
❌ внешний провайдер отвечает слишком долго

В .NET 8 это стало намного проще благодаря Microsoft.Extensions.Resilience (на базе Polly).

Можно собрать свой ResiliencePipeline и добавить в DI один раз:

✅ Retry — повторить запрос
✅ Timeout — ограничить время ожидания
✅ Circuit Breaker — остановить поток ошибок
✅ Fallback — вернуть запасной результат
✅ Rate Limiter — защитить сервис
✅ Hedging — отправить альтернативный запрос

Главный плюс — не нужно настраивать защиту в каждом месте кода.

Создаёшь pipeline → регистрируешь через DI → используешь где нужно:


var user = await pipeline.ExecuteAsync(
async token => await httpClient.GetAsync("api/users", token)
);


Чистый код, единая стратегия обработки ошибок и меньше боли при росте микросервисов.

Если пишете на C# и строите production-системы — Resilience Pipelines стоит добавить в свой toolbox. ⚙️
Post #1859 3.3K
Как ограничить количество запросов к API по IP в ASP.NET Core

Встроенный Rate Limiter позволяет сделать это буквально в несколько строк:


builder.Services.AddRateLimiter(options =>
{
options.AddPolicy("fixed-by-ip", httpContext =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: httpContext.Connection.RemoteIpAddress?.ToString(),
factory: _ => new FixedWindowRateLimiterOptions
{
PermitLimit = 10,
Window = TimeSpan.FromMinutes(1)
}));
});


В этом примере один IP может сделать максимум 10 запросов за минуту.

Но использовать такой подход вслепую не стоит.

Причина простая: реальные пользователи могут находиться за NAT, прокси или корпоративным шлюзом и иметь один внешний IP. В итоге лимит одного человека начнёт влиять на остальных.

Поэтому для авторизованных пользователей обычно лучше ограничивать запросы по уникальному userId.

А rate limit по IP оставлять для анонимных endpoint'ов, защиты от простых ботов или как дополнительный слой защиты.
Older posts →

About this channel

How can I read @csharp_ci without a Telegram account?
TGViewer shows the public web preview Telegram publishes for C# (C Sharp) programming: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does C# (C Sharp) programming have?
C# (C Sharp) programming (@csharp_ci) has 18.1K subscribers on Telegram, refreshed roughly every 30 minutes.
Does C# (C Sharp) programming know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →