Здесь я вижу одну проблему:
StopRequested не должен быть автоматическим свойством.Вы должны определить это как свойство с полем поддержки, чтобы пометить его volatile .
private volatile bool stopRequested;
private bool StopRequested
{
get { return this.stopRequested; }
set { this.stopRequested = value; }
}
Без этого возможно, что условие выхода можетне будет виден (по крайней мере, сразу) вашим потоком, когда он установлен службой.
Кроме того, если вариант .NET 4, существует гораздо более простой дизайн, который может быть выполнен с использованием CancellationToken
и BlockingCollection<T>
.