Примеры решений в C#

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена c#: LINQ, async/await, JSON, DI, исключения и шаблоны надёжного .NET-кода..

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.

Теория и соседние материалы

Термины

Термин Назначение
LINQ Запросы к коллекциям и IQueryable
async/await Асинхронность без блокировки потока
CancellationToken Отмена длительных операций
DI Внедрение зависимостей в ASP.NET Core

1. LINQ: отчёт по заказам

var report = orders
    .Where(o => o.IsActive)
    .GroupBy(o => o.CustomerId)
    .Select(g => new {
        CustomerId = g.Key,
        Total = g.Sum(x => x.Amount),
        Count = g.Count()
    })
    .OrderByDescending(x => x.Total)
    .ToList();

2. async/await с таймаутом

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
HttpResponseMessage response = await httpClient.GetAsync(url, cts.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(cts.Token);

3. System.Text.Json

var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var dto = JsonSerializer.Deserialize<OrderDto>(json, options)
    ?? throw new InvalidOperationException("Empty payload");

4. Обработка исключений

try
{
    await service.ProcessAsync(ct);
}
catch (OperationCanceledException)
{
    logger.LogInformation("Operation cancelled");
}
catch (Exception ex)
{
    logger.LogError(ex, "Process failed for {OrderId}", orderId);
    throw;
}

5. Параллельная обработка с лимитом

var semaphore = new SemaphoreSlim(4);
var tasks = items.Select(async item =>
{
    await semaphore.WaitAsync(ct);
    try { await ProcessItemAsync(item, ct); }
    finally { semaphore.Release(); }
});
await Task.WhenAll(tasks);

Типичные ошибки

  • .Result / .Wait() на async → deadlock.
  • async void вне event handler.
  • Nullable reference types отключены без причины.

Чек-лист

  • CancellationToken проброшен в I/O.
  • Секреты в Configuration / Key Vault.
  • xUnit + интеграционные тесты на TestHost.