Принуждение HostingEnvironment.QueueBackgroundWorkItem к отмене через определенное время - PullRequest
0 голосов
/ 09 апреля 2019

Я использую не асинхронный / ожидающий код, подобный этому

HostingEnvironment.QueueBackgroundWorkItem(x => CallApi());

Я видел примеры использования токена отмены, используемого для отмены запроса, если мой метод CallApi занимает, скажем, более 10 секунд, есть ли способ отменить весь запрос и зарегистрировать какой-нибудь вывод? Я не могу найти пример, когда был установлен определенный тайм-аут

1 Ответ

1 голос
/ 10 апреля 2019

Отмена кооперативная.Отмена операции "uncancelable" очень неудобна.

Если CallApi занимает CancellationToken, то вы можете просто сконструировать одну из них, используя CancellationTokenSource, которая отменяется через определенное время.

ЕслиCallApi не принимает CancellationToken, но работает на каком-то объекте HANDLE, тогда вы можете попробовать отменить, закрыв базовый HANDLE.Это распространенный (но не универсальный) способ отмены операций, которые иначе не могут быть отменены.

В противном случае CallApi - это не подлежащая отмене операция, что означает, что вы смотрите на какой-то неуклюжий код.

Самый надежный способ отменить не подлежащую отмене операцию - поместить код в отдельный процесс и завершить этот процесс при отмене.

Однако, поскольку вы уже находитесь в ASP.NET, вы также можетепосмотрите на размещение кода в отдельном домене или потоке приложений и выгрузку домена приложений / завершение потока при отмене.Со временем это приведет к нестабильности процесса, но ASP.NET будет периодически перезапускать ваш процесс, поэтому он должен (в конце концов) восстановиться.

...