Я знаю, что существуют различные способы ограничить время выполнения задачи под .Net, и я задавался вопросом, есть ли какие-либо другие, которые я пропустил, или изменения/улучшения методов, которые я использовал ранее.Как ограничить время выполнения задачи под .NET?
Где я не понимаю, как именно функционирует методология, я включил в нее вопросы.
Существующие методы Я знаю, хотя и не обязательно использовал сам:
- Создать
Thread
, опрос для того, чтобы закончить в течение определенного времени, а затем убить нить. Это решение не очень велико, поскольку оно зависит отThreadAbortException
, которые несколько неприятны, и, если я помню, у вас нет гарантии, что вы выберете код, то вы можете выйти из него, т. Е. Он может оставить неиспользуемые ресурсы в использовании и т. Д. - Используйте шаблон
IAsyncResult
, проблема заключается в том, что вы можете подождать определенное количество времени, но нет простого способа сообщить, что вы хотите, чтобы запрос был прерван, поэтому вам нужно полагаться на установку булевского флага (или аналогичного), который проверяется на наличие внутри асинхронного кода и заставляет его остановиться. Проблема здесь в том, что если асинхронный код застревает в определенном разделе кода, он может продолжать работать некоторое время до того, как он действительно завершится. - Я часто видел, как люди рекомендуют
BackgroundWorker
для асинхронного использования, но можете ли вы использовать это под ASP.Net (я бы так предположил), и имеет ли он простой способ прекратить процесс асинхронности через определенное время? - Используйте API-интерфейс задачи в .Net 4.0 (в настоящее время вся моя работа ограничена .Net 3.5, поэтому не вариант для меня). Из быстрого чтения документации MSDN, похоже, вы можете легко отменить Задачу, используя
CancellationToken
, но как быстро отменяется аннулирование, и гарантирует ли она, что будут вызваны блокиfinally
.
Все решения/предложения/методологии приветствовать