Я хочу знать, что произойдет, если я установлю интервал таймера на бесконечный, когда таймер активен.Что произойдет, если периодическое задание будет запущено в то время, когда я установил интервал в бесконечный режим?Это будет блок?Лучше ли вызывать метод stop () и вызывать start всякий раз, когда я этого захочу?
Я периодически записываю данные в StreamWriter, я использую тот же потоковый писатель внутри периодической задачи, который выполняет таймер, и вдругое место моего кода (в обоих местах я синхронизирую код с блокировкой с тем же объектом).Если я прокомментирую код периодической задачи (оставив его пустым), все пойдет хорошо, но когда я позволю ему выполнить код, код за пределами периодической задачи, которая записывает в потоковую запись и блокируется.Кажется, что потоковый писатель не может вернуться из метода строки записи.Я думаю, что установка интервала таймера в бесконечность является причиной этой проблемы.
Периодическая задача:
lock(object)
{
sw.WriteLine("@@@")
}
Другой поток:
timer.Change(Timeout.Infinite, Timeout.Infinite);
lock(object)
{ sw.WriteLine("@@@") //Thread is blocking here when the code in the timer delegate is executed.
}
Я думаю, что timer.Change может бытьв результате чего поток таймера оставляет sw в несогласованном состоянии, поэтому вызов WriteLine после изменения интервала никогда не завершает выполнение
Кстати, средство записи потока пишет в Pipeline между двумя разными процессами, ноЯ не думаю, что имеет значение в этом сценарии
Спасибо