Тайм-аут асинхронной задачи? - PullRequest
3 голосов
/ 29 ноября 2010

Есть очень распространенная задача, с которой я снова сталкиваюсь.Я уже решил эту проблему пару раз, но теперь я ищу более " элегантный " способ - можете ли вы внести какой-то вклад?

Ситуация:
У меня есть метод, который я хотел бы запустить "полу асинхронный".Другими словами: запустите его и подождите определенное время x.Если метод не завершен к тому времени («истекло время ожидания»), я хочу продолжить мой код с некоторыми процедурами очистки.

Решения на данный момент:

  1. Использование AutoResetEvent (или ManualResetEvent) в сочетании с методом annonymus с использованием .WaitOne (x).
  2. Использование Thread / BackgroundWorker в сочетании с таймером.Если таймер запускает свой обработчик до того, как поток останавливает его, время ожидания истекает.

Оба аппроксайма работают нормально, но я думаю, что есть лучший способ с 4.0.

Предложения?

1 Ответ

6 голосов
/ 29 ноября 2010

Делает ли Task.Wait(Timeout) из библиотеки параллельных задач то, что вы хотите?(Вы можете объединить это с токенами отмены, чтобы отменить задачу после истечения времени ожидания.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...