Примеры решений в C#
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена c#: LINQ, async/await, JSON, DI, исключения и шаблоны надёжного .NET-кода..
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
Теория и соседние материалы
Термины
| Термин | Назначение |
|---|---|
| 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.