Я думаю, что лучшим ответом было бы заменить Thread.Sleep на AutoResetEvent или, возможно, семафор.Это должен быть относительно чистый обмен, и он не должен быть серьезным архитектурным изменением существующего приложения, например, переключение на ThreadPool или что-то подобное
Если это невозможно, то я посмотрю, можно ли спящему потоку узнать, есть ли для этого работа.Если он может обладать этим знанием, тогда установите сон на что-то среднее, скажем, час или около того, предполагая, что это работает.Если поток проснется через час без работы, он увидит, что ему нечего делать, и снова заснет.
Кроме того, бесконечный сон не работает, мне кажется довольно существенной ошибкой.Вы используете самую последнюю версию Mono?Если это ошибка, исправленная в более поздней версии, можете ли вы перейти на другую версию?