Когда вы говорите «до истечения времени ожидания», вы имеете в виду «продолжать обработку в течение часа, а затем остановить»? Если это так, я бы, вероятно, просто сделал это очень явным - работайте в начале, когда вы хотите закончить, а затем в своем цикле обработки проверьте, достигли ли вы этого времени или нет. Это невероятно просто, легко тестируется и т. д. С точки зрения тестируемости вам могут понадобиться фальшивые часы, которые позволят вам программно устанавливать время.
РЕДАКТИРОВАТЬ: Вот некоторый псевдокод, чтобы попытаться уточнить:
List<DataSource> dataSources = ConnectToDataSources();
TimeSpan timeout = GetTimeoutFromConfiguration(); // Or have it passed in!
DateTime endTime = DateTime.UtcNow + timeout;
bool finished = false;
while (DateTime.UtcNow < endTime && !finished)
{
// This method should do a small amount of work and then return
// whether or not it's finished everything
finished = ProcessDataSources(dataSources);
}
// Done - return up the stack and the console app will close.
Это просто использование встроенных часов, а не интерфейса часов, который можно сымитировать и т. Д., Но это, вероятно, упрощает понимание общего подходящего.
person
Jon Skeet
schedule
09.10.2008