ускорение reminders
This commit is contained in:
@@ -38,25 +38,30 @@ public sealed class ReminderService(
|
||||
.Where(x => x.SlaHours != null && x.ListId != null && x.SiteUrl != null)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
var reminders = new List<ReminderDto>();
|
||||
// Типы независимы (разные сайты/списки в SharePoint) — их обход
|
||||
// распараллелен, иначе время растёт линейно с числом типов: каждый тип
|
||||
// сам по себе делает несколько последовательных HTTP-запросов.
|
||||
var results = await Task.WhenAll(types.Select(type => GetOverdueForTypeSafeAsync(type, now, cancellationToken)));
|
||||
|
||||
foreach (var type in types)
|
||||
return Result.Ok<IReadOnlyList<ReminderDto>>(results.SelectMany(r => r).ToList());
|
||||
}
|
||||
|
||||
private async Task<IReadOnlyList<ReminderDto>> GetOverdueForTypeSafeAsync(
|
||||
RequestType type, DateTimeOffset now, CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
reminders.AddRange(await GetOverdueForTypeAsync(type, now, cancellationToken));
|
||||
return await GetOverdueForTypeAsync(type, now, cancellationToken);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Недоступный список одного типа не должен обнулять напоминания по
|
||||
// всем остальным: Power Automate получит то, что удалось собрать.
|
||||
logger.LogError(e, "Напоминания по типу заявки «{Type}» не собраны", type.Name);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
return Result.Ok<IReadOnlyList<ReminderDto>>(reminders);
|
||||
}
|
||||
|
||||
private async Task<IReadOnlyList<ReminderDto>> GetOverdueForTypeAsync(
|
||||
RequestType type, DateTimeOffset now, CancellationToken cancellationToken)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user