wait для маркера ожидания токена отмены:
while ( !token.IsCancellationRequested )
{
if ( token.WaitHandle.WaitOne( timeout ) )
{
// cancelled. Don't have to do anything here, the above while
// loop will break now.
}
else
{
// ''timeout' period elapsed - do some periodic work here.
}
}
EDIT: если у вас нет периодической работы над этим потоком, просто используйте перегрузку WaitOne
без параметра timeout.
token.WaitHandle.WaitOne();
, который будет неопределенно долго ждать, пока токен отмены не будет сигнализирован, а затем продолжить.
EDIT2:
Я только что прочитал, что у вас есть этот цикл while внутриподписки наблюдаемых.Это должно быть сделано сразу после того, как вы настроили все свои подписки на наблюдаемые, но не внутри каждого фактического обратного вызова подписки (эти подписки будут выполняться в том потоке, который вызвал исходное событие (события) или, возможно, в других потоках пула потоков, а не в потоке задач, который настраивает подписки).).