Как-то я не могу поверить, что я первый, кто столкнулся с этой проблемой (и я не хочу верить, что я достаточно глуп, чтобы не видеть решение напрямую), но мой поиск-фу не был достаточно сильный.
Я регулярно сталкиваюсь с ситуацией, когда мне нужно сделать несколько трудоемких шагов один за другим. Рабочий процесс выглядит как
var data = DataGetter.GetData();
var processedData = DataProcessor.Process(data);
var userDecision = DialogService.AskUserAbout(processedData);
// ...
Я не хочу блокировать пользовательский интерфейс на каждом шаге, поэтому каждый метод немедленно возвращается и вызывает событие после его завершения. Теперь начинается веселье, поскольку вышеупомянутый блок кода мутирует в
DataGetter.Finished += (data) =>
{
DataProcessor.Finished += (processedData) =>
{
DialogService.Finished(userDecision) =>
{
// ....
}
DialogService.AskUserAbout(processedData);
}
DataProcessor.Process(data);
};
DataGetter.GetData();
Это очень похоже на стиль продолжения прохождения для моего вкуса, и должен быть лучший способ структурировать этот код. Но как?