|
Заблокирован
|
|||||||||||
Метод async без await в примере книги06.11.2023, 22:50. Показов 1463. Ответов 10
В книге Стивена Клири "Конкурентность в c#" на стр 48 (в переводе) в коде примера используются методы async без await, вот такие
Попалось обсуждение на английском https://stackoverflow.com/ques... acks-await Но я там так и не понял к чему в итоге люди пришли. Слишком много слов) Главное, что не понятно - зачем в книге такое писать? Причем, там в книге никаких пояснений по ходу не было. (у меня складывается мнение, что текст в переводе у этой книги вообще неудачный) На всякий случай весь код примера из книги Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 06.11.2023, 22:50 | |
|
Ответы с готовыми решениями:
10
Переписать асинхронный метод без использования async/await
Асинхронный метод: async + await |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 06.11.2023, 23:28 | |||
Сообщение было отмечено titan4ik как решение
РешениеЕсли убрать async, то исключение вылетит при вызове метода, не дожидаясь возврата таски. Т.е. суть примера — демонстрация обработки исключений, а все остальное — карниз и строительные леса для этой демонстрации.
1
|
|||
|
|
||||||
| 06.11.2023, 23:32 | ||||||
|
очень похоже что данные методы -- просто пример, когда таска падает с какой-либо ошибкой. Почему выбрали именно
NotImplementedException и InvalidOperationException -- скорее всего чтобы продемонстрировать как разные исключения потом агрегируются в catch (Exception ex)Теперь почему мы пишем async без await. Дело в том что нам нужно создать таску, т.е. метод всегда должен вернуть объект Task. Но сама задача должна упасть с ошибкой, поэтому в теле задачи просто вызов исключения. А так как ожидания для этого никакого не требуется, то await и отсутствует. По идеи это эквивалент такому
Task.Run, которому ещё нужно передать делегат, можно просто написать async метод.
1
|
||||||
|
|
||||||||||||||||
| 07.11.2023, 01:12 | ||||||||||||||||
|
Элд Хасп, я немного не про то. Оба подхода подразумевает что вызов метода отработает без ошибки и вернет Task. Сам по себе объект Task не "провоцирует" появление исключения, это вполне себе валидный объект. В вот уже ожидания этого Task вызовет исключение. Грубо говоря я про этот момент
2
|
||||||||||||||||
|
Заблокирован
|
||
| 07.11.2023, 14:45 [ТС] | ||
|
С целью полноты информации и объективности для.
Каюсь, я там как-то просмотрел (?!) объяснение (после кода). Но во-первых его лучше бы до кода дать, как прелюдию. А во-вторых, отдельно нужно было бы подтвердить что и так можно - async без await - если очень нужно. Ибо изначально всегда читал, что не надо так делать - по понятным причинам. Вот цитата из книги.
0
|
||
|
Модератор
|
||
| 07.11.2023, 19:11 | ||
|
1) Приведённый в топе пример - синхронный. Несмотря на то, что возвращает Task. А Task.Run(async () => throw new Exception()); асинхронный.2) В исходном методе исключение будет выкинуто сразу в методе ThrowExceptionAsync. В с Task.Run в лямбда методе, оттуда попадёт в таск созданным руном, из него будет отловлен авайтом, будет создано новое исключение для ThrowExceptionAsync. В котором исходное будет записано в InnerException.
0
|
||
| 07.11.2023, 19:52 | ||||||
|
Не по теме: Элд Хасп, хм... насчет InnerException -- вроде не так работает. Ниже пример, как проверял. Но в целом кажись понял про что вы: в случае
0
|
||||||
|
Модератор
|
|||||||||||||||||
| 07.11.2023, 23:12 | |||||||||||||||||
0
|
|||||||||||||||||
| 08.11.2023, 01:02 | ||||||||||||
|
Не по теме:
async () =>. В этом случае получаем "пожожие" записи
--- End of stack trace from previous location --- это не бессмысленный комментарий, а жирный индикатор.
0
|
||||||||||||
|
Модератор
|
||
| 08.11.2023, 08:04 | ||
![]() Моя небрежность. Да, так разница уменьшится, но всё равно останется, как вы уже заметили. И самое важное, изменится поток в котором исполняется тело метода, что особенно важно для приложений с чувствительностью к потокам с контекстом синхронизации: Формы, WPF, UWP и др.
0
|
||
| 08.11.2023, 08:04 | |
|
Помогаю со студенческими работами здесь
11
Как выполняется метод, использующий async и await? async/await не выполняется метод в асинхронном режиме
Выполнение метода в отдельном потоке без await/async Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|