Таймер C #: изменение интервала на бесконечность во время выполнения периодической задачи - PullRequest
0 голосов
/ 21 мая 2018

Я хочу знать, что произойдет, если я установлю интервал таймера на бесконечный, когда таймер активен.Что произойдет, если периодическое задание будет запущено в то время, когда я установил интервал в бесконечный режим?Это будет блок?Лучше ли вызывать метод 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 между двумя разными процессами, ноЯ не думаю, что имеет значение в этом сценарии

Спасибо

...