c# – 在冷IObservable上暂停并恢复订阅
发布时间:2020-12-15 06:35:07 所属栏目:百科 来源:网络整理
导读:使用 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(); Thre
使用
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) 解决方法
它只是工作:
class SimpleWaitPulse { static readonly object _locker = new object(); static bool _go; static void Main() { // The new thread will block new Thread (Work).Start(); // because _go==false. Console.ReadLine(); // Wait for user to hit Enter lock (_locker) // Let's now wake up the thread by { // setting _go=true and pulsing. _go = true; Monitor.Pulse (_locker); } } static void Work() { lock (_locker) while (!_go) Monitor.Wait (_locker); // Lock is released while we’re waiting Console.WriteLine ("Woken!!!"); } } 详情请参阅How to Use Wait and Pulse (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |