#c_sharp #async_await
Возможно ли использовать асинхронные методы в цепочке? var blog = new Blog(); await blog.ValidateAsync().InsertAsync().SaveAsync();
Ответы
Ответ 1
Нет. Все асинхронные методы возвращают Task, а чтобы добраться до результата таска, нужно дописать ключевое слово await. Поскольку второй метод вам нужно вызвать у результата первого таска, то нужно сперва дождаться этого таска. И так далее. Получится следующая вложенная цепочка: await (await (await blog.ValidateAsync()).InsertAsync()).SaveAsync(); Можно оформить это костылями с использованием методов расширения, где InsertAsync() будет являться методом расширения для некоего Task, где T содержит все необходимое для работы метода. Аналогично и с SaveAsync(). И остальные ожидания будут происходить уже внутри этих методов. Однако в вашем случае не советовал бы так делать. Fluent-синтаксис хорошо в весьма определенных сценариях, а цепочка "валидация - вставка - сохранение", на мой взгляд, в них не входит. Лучше всего вызывать эти методы последовательно, не экономить на строчках и не стремиться к "красоте". Ответ 2
В такой цепочке - нет, нельзя. Можно написать разве что вот так: await (await (await blog.ValidateAsync()).InsertAsync()).SaveAsync(); Но лучше все-таки явно разделять разные операции: await blog.ValidateAsync(); await blog.InsertAsync(); await blog.SaveAsync();
Комментариев нет:
Отправить комментарий