имхо, callback-и в целом зло, и чем их меньше в программе тем лучше.
callback усложняет логику кода.
без колбаков - мы имеем однородный последовательный порядок выполнения: запрос, ответ, запрос, ответ.
с колбаками - мы фактически получаем прыгающее спагети, в котором сходу сказать, что за чем будем выполняться очень тяжело.
или другими словами без колбаков - мы имеем последовательность четко друг от друга отделенных атомарных конструкций, с колбаками мы получаем монолитный код - который за раз делает все.
здесь я кстати разделяю лямбды и колбаки.
колбак - это когда внутри делегата происходит изменение внешнего мира, лямбда - это когда происходит замыкание по чтению внешнего мира на внутренний.
возьмем, например, вот такой кусок код:
code:
int? result = int.TryParse(value);
if (result != null)
{
Console.WriteLine("i = {0}", result);
}
else
{
Console.WriteLine("conversion failed");
}
здесь все четко - есть атомарная конструкция разбора числа, есть атомарная конструкция вывода значения
а вот здесь уже у нас монолитная конструкция, в которой уже трудно отделить разбор значения от вывода.
code:
IntEx.Parse(
"123",
i => Console.WriteLine("i = {0}", i),
() => Console.WriteLine("conversion failed")
)();