Есть примерно такой код:
foreach (var item in _urlToFies)
{
var newOrders = await _freelanceService.GetNewOrdersAsync(item.Key, item.Value);
foreach (var order in newOrders)
{
var keywords = order.GetKeywords();
var usersForSend = await _queryProcessor.ProcessAsync<GetUsersForSendOrdersQuery, IEnumerable<UserEntity>>(new GetUsersForSendOrdersQuery(keywords, ""));
foreach (var user in usersForSend)
{
var senders = _sendersFactory.CreateSenders(user);
foreach (var sender in senders)
{
await sender.SendAsync(user, order);
}
}
}
}
Тут 3 вложенных цикла. Внутри каждого мне по идее нужно использвоать try-catch. Но тогда получается примерно такая портянка -
ссылка на гист. Читать её довольно сложно. Но как иначе? Думал использовать монады (Either и пр.). Код становится намного приятнее, но тогда теряется единообразность проекта, ибо в каких-то местах у меня монады, а в каких-то - обычные ошибки.
Как быть?