Алекс сделал замечательную точку зрения на удобочитаемость. Эквивалентно, функция также является интерфейсом, достаточным для определения возвращаемого типа (типов), и вы также получаете значимые имена переменных.
delegate void OpDelegate(int op);
Task<bool> GetDataTaskAsync(OpDelegate callback)
{
bool canGetData = true;
if (canGetData) callback(5);
return Task.FromResult(canGetData);
}
Абоненты предоставляют лямбду (или названную функцию), а intellisense помогает при копировании имя переменной из делегата.
int myOp;
bool result = await GetDataTaskAsync(op => myOp = op);
Этот конкретный подход похож на метод «Try», где myOp
установлен, если результатом метода является true
. В противном случае вам все равно myOp
.