Используя Rx, я хочу приостановить и возобновить функциональность в следующем коде:
Как реализовать Pause() и Resume()?
static IDisposable _subscription;
static void Main(string[] args)
{
Subscribe();
Thread.Sleep(500);
// Second value should not be shown after two seconds:
Pause();
Thread.Sleep(5000);
// Continue and show second value and beyond now:
Resume();
}
static void Subscribe()
{
var list = new List<int> { 1, 2, 3, 4, 5 };
var obs = list.ToObservable();
_subscription = obs.SubscribeOn(Scheduler.NewThread).Subscribe(p =>
{
Console.WriteLine(p.ToString());
Thread.Sleep(2000);
},
err => Console.WriteLine("Error"),
() => Console.WriteLine("Sequence Completed")
);
}
static void Pause()
{
// Pseudocode:
//_subscription.Pause();
}
static void Resume()
{
// Pseudocode:
//_subscription.Resume();
}
Rx Решение?
-
Я считаю, что могу заставить его работать с каким-то булевым полевым стробированием в сочетании с блокировкой потоков (
Monitor.Wait
иMonitor.Pulse
) -
Но существует ли Rx-оператор или какая-либо другая реактивная стенография для достижения той же цели?