19 / 19 / 14
Регистрация: 06.08.2009
Сообщений: 533
|
||||||||||||||||
1 | ||||||||||||||||
Асинхронный метод долго (никогда?) не завершается03.07.2018, 08:49. Показов 1469. Ответов 7
Метки нет (Все метки)
Добрый день.
Вызываю асинхронный метод вот так:
А делает этот асинхронный метод вот что:
0
|
03.07.2018, 08:49 | |
Ответы с готовыми решениями:
7
Почему Task никогда не завершается? Морской бой: Проверка на победителя никогда не завершается Работа компьютера очень долго завершается Не завершается метод |
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
03.07.2018, 09:47 | 2 |
Совершаете самую распространенную ошибку при работе с асинхронными методами: мешаете асинхронные вызовы с синхронным ожданием, усугубляя все это вызовами Thread.Sleep.
Кстати, зачем каждый раз вы вызываете GetAwaiter на задаче? Почему не обращаетесь сразу к результату?
0
|
19 / 19 / 14
Регистрация: 06.08.2009
Сообщений: 533
|
|||||||||||
03.07.2018, 10:17 [ТС] | 3 | ||||||||||
А что, так можно??
Переделал вот так:
Вообще, задача состоит в следующем, чтобы то, что вернула библиотека в своем формате, конвертировать в мой формат, который совместим с моим кодом, поддерживающим некий универсальный интерфейс ITerminalDriver.
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
||||||||||||||||
03.07.2018, 10:34 | 4 | |||||||||||||||
Сообщение было отмечено kolorotur как решение
Решение
И опять там GetAwaiter. Зачем он там?
Как выглядит интерфейс? Добавлено через 15 минут Попробуйте переписать так:
1
|
19 / 19 / 14
Регистрация: 06.08.2009
Сообщений: 533
|
||||||
03.07.2018, 11:02 [ТС] | 5 | |||||
kolorotur, Спасибо.
вот так:
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
03.07.2018, 11:13 | 6 |
Тем более нет причин использовать блокирующие вызовы.
В целом, если у вас в методе присутствует await , то использовать в том же методе или в вызывающих методах блокирующие вызовы (Thread.Sleep , GetAwaiter().GetResult , .Result и т.д.) — верный способ повесить поток.Если этому потоку "посчастливиться" быть главным (UI), то наглухо повиснет все приложение.
0
|
19 / 19 / 14
Регистрация: 06.08.2009
Сообщений: 533
|
|||||||||||
03.07.2018, 14:42 [ТС] | 7 | ||||||||||
kolorotur, Спасибо. Можно еще вопрос? Как перехватить исключения в самом sendOrder, а не в этом коде:
Как вообще try ... catch в асинхроных методах работаю? Добавлено через 10 минут А все, спасибо, разобрался сам, сделал вот так:
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
||||||
03.07.2018, 15:05 | 8 | |||||
megabax, не повторяйтесь без нужды:
0
|
03.07.2018, 15:05 | |
03.07.2018, 15:05 | |
Помогаю со студенческими работами здесь
8
Асинхронный метод Фоновый/асинхронный метод Асинхронный метод + потоки Сделать асинхронный метод с задержкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |