Как наложить ограничение времени на операцию - PullRequest
2 голосов
/ 13 апреля 2011

У меня есть (возможно) длительная операция a , к которой я хочу наложить ограничение по времени t (в миллисекундах).Если операция a занимает менее t миллисекунд, то я возвращаю ответ из операции a ;в противном случае я хочу прервать операцию и вернуть правильный код ошибки, указывающий, что ограничение по времени было превышено.

Как я могу сделать это в C #?Если у вас есть другие идеи, не зависящие от языка, не стесняйтесь поделиться?

Ответы [ 4 ]

4 голосов
/ 13 апреля 2011

Лучше всего обернуть его в Task<T> или Task и использовать Wait.

Смотрите здесь .

Task t = new Task(DoStuff());
t.Wait(1000);
1 голос
/ 13 апреля 2011

Вы можете запустить два потока: один для операции «а», а другой с таймером.

Если поток таймера завершает свою работу, он проверяет, завершился ли поток операции "a".Если нет, прервите (все еще работающий) поток и верните свой код ошибки тайм-аута.

Если операция «a» завершается раньше, чем завершается поток таймера, просто убейте поток таймера, прежде чем вернуть результат.

0 голосов
/ 13 апреля 2011

По этому вопросу уже есть материал. Реализация общего тайм-аута C #

Общая тема заключается в том, чтобы иметь асинхронный поток (делегат, задачу и т. Д.), Чтобы следить за временем.Будьте очень осторожны с Thread.Abort (), вы должны оставить задачу запущенной, если можете, или используйте какую-то чистую отмену.

0 голосов
/ 13 апреля 2011

Используйте метод BeginInvoke, чем через некоторое время проверяйте IAsyncResult.IsCompleted.Если он завершен, получите результат с помощью EndInvoke.

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