У меня есть этот код делает то, что я хочу:Ожидание результата, не блокируя поток
TriggerSomeExternalProcess();
double secondsElapsed = 0;
DateTime startTime = DateTime.UtcNow;
double timeoutInSeconds = 10;
while (secondsElapsed < timeoutInSeconds) {
// TODO: this seems bad...
secondsElapsed = DateTime.UtcNow.Subtract(startTime).TotalSeconds;
}
CheckStatusOfExternalProcess();
Цель состоит в том, чтобы TriggerSomeExternalProcess
, а затем CheckStatusOfSomeExternalProcess
- но этот процесс работает на том же потоке, так что я не могу сделать Thread.Sleep()
. Это непрерывный процесс, которого нельзя ждать.
Я чувствую, что вышеописанный цикл while
неправильный - какой шаблон вы используете, когда вам нужно ждать, не блокируя свою нить?
копия из одного ответа на один из ответов К сожалению, я не могу коснуться кода в ExternalProcess. Я пишу тест, и это те методы, к которым у меня есть доступ. Я знаю, что это меньше, чем идеал
Возможный дубликат из [Асинхронно ждать Task для завершения с таймаутом] (http://stackoverflow.com/questions/4238345/asynchronously-wait-for-taskt-to-complete-with-timeout) –
Использует ли таймер вариант? –
@PeterBons Я так думаю. Сейчас я сделаю некоторое исследование о том, как использовать это в этом случае. – SB2055