Гарантируется ли истечение срока действия асинхронных вызовов Windows Runtime? - PullRequest
2 голосов
/ 19 мая 2019

Среда выполнения Windows интенсивно использует асинхронные шаблоны, разгружая долго выполняемые задачи в пул потоков. Я прочитал все статьи в Threading и асинхронное программирование , но не смог найти ответ на свой вопрос:

Все ли асинхронные вызовы среды выполнения Windows гарантированно возвращаются в какой-то момент?

1 Ответ

0 голосов
/ 03 июня 2019

Как отмечает @ Пауло в комментариях, это полностью зависит от того, как написан код. Легко написать собственный асинхронный код, который никогда не возвращается, и тривиально заблокировать ваше приложение с помощью API платформы, выполнив .Wait() из потока пользовательского интерфейса.

По сути, асинхронная операция - это функция, которая возвращает объект (часто называемый «обещанием» или «будущим»), а затем этот объект либо устанавливает событие, либо вызывает функцию обратного вызова в некоторый момент времени в будущем (это «логическое» возвращаемое значение асинхронной операции).

Любая часть этого может потерпеть неудачу - первоначальная функция может никогда не вернуться к возвращению объекта обещания, или обещание может никогда не дойти до вызова обратного вызова / установки события.

...