c# await class.methodAsync1().methodAsync2()

202
22 сентября 2017, 16:53

Возможно ли использовать асинхронные методы в цепочке?

var blog = new Blog();
await blog.ValidateAsync().InsertAsync().SaveAsync();
Answer 1

Нет. Все асинхронные методы возвращают Task, а чтобы добраться до результата таска, нужно дописать ключевое слово await. Поскольку второй метод вам нужно вызвать у результата первого таска, то нужно сперва дождаться этого таска. И так далее. Получится следующая вложенная цепочка:

await (await (await blog.ValidateAsync()).InsertAsync()).SaveAsync();

Можно оформить это костылями с использованием методов расширения, где InsertAsync() будет являться методом расширения для некоего Task<T>, где T содержит все необходимое для работы метода. Аналогично и с SaveAsync(). И остальные ожидания будут происходить уже внутри этих методов.

Однако в вашем случае не советовал бы так делать. Fluent-синтаксис хорошо в весьма определенных сценариях, а цепочка "валидация - вставка - сохранение", на мой взгляд, в них не входит. Лучше всего вызывать эти методы последовательно, не экономить на строчках и не стремиться к "красоте".

Answer 2

В такой цепочке - нет, нельзя.

Можно написать разве что вот так:

await (await (await blog.ValidateAsync()).InsertAsync()).SaveAsync();

Но лучше все-таки явно разделять разные операции:

await blog.ValidateAsync();
await blog.InsertAsync();
await blog.SaveAsync();
READ ALSO
С#Afforge VideoPlayer проигрывание картинки

С#Afforge VideoPlayer проигрывание картинки

Можно ли используя Afforge проигрывать в его плеере одну картинку, взятую из jpeg-файла без формирования видеофайлов с помощью класса VideoFileWriter...

237
Где учить C# сейчас? [требует правки]

Где учить C# сейчас? [требует правки]

Привет всемЯ полный ноль в программировании

270
С# - Повторение заданного условия

С# - Повторение заданного условия

Задание: Рассчитать значение функции в заданной точкеИспользовать простейшие функции вида Y = 3 – X + 2 * X * X * X, не предусматривающие вычисления...

285
Учесть кавычки в JSON C#

Учесть кавычки в JSON C#

Получаю с сервера строку вида:

258