ManualResetEvent to IObservable<bool>(或 WaitHandle to IObservable<Unit>)?



我想根据手动resetevent的集合/重置创建一个iObservable-stream,例如原则上的东西

IObservable<bool> ToObservable(ManualResetEvent ev)
{
  var s = new Subject<bool>();
  ev.OnSet += s.OnNext(true);
  ev.OnReset += s.OnNext(false);
  return s;
}

当然,手动Resetevent不会暴露此类事件。因此,有什么方法可以观察到何时停止/重置?

对于记录,如果无法将设置/不设置为true/false之间的区分,则更简单的iObservable&lt; unit&gt;每当ManualResetevent更改的状态也可以时,就可以推动一个值。

有什么方法可以做到吗?

我找到了一篇文章,解释了如何将手动resetevent(或者更确切地说是等待手(转换为任务(包装手动resetevent作为等待任务(,而每当下一次手动resetevent更改(从设置不设置或其他方式(。但是我还没有真正找到如何将其链接到一个序列中的任何方法(例如,在任务完成后,我需要为下一个事件等创建另一个,以某种方式从中创建一个可观察到的"。递归序列(

谢谢!

有许多不同的方法可以做到这一点,但是有些喜欢:

public static class ManualResetEventObservable
{
    public static IObservable<bool> Create(ManualResetEvent e, TimeSpan timeout)
    {
        return Observable.Create<bool>(observer =>
        {
            var cancelEvent = new ManualResetEvent(false);
            var waitHandles = new[] { cancelEvent, e };
            var thread = new Thread(new ThreadStart(() =>
            {
                var index = WaitHandle.WaitAny(waitHandles, timeout);
                if (index == 1)
                    observer.OnNext(true);
                observer.OnCompleted();
            }));
            thread.Start();
            return Disposable.Create(() => cancelEvent.Set());
        });
    }

相关内容

  • 没有找到相关文章

最新更新