我想根据手动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());
});
}