取消冷可观测量 [英] Cancelling Cold Observables
本文介绍了取消冷可观测量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
H
我的一个组件,提供了一种查询数据的RX方式。该方法的签名是:
One component of mine, offers a RX way to query data. the signature of the method is:
IObservable<TEntity> DataStore.Query<TEntity>(...) where TEntity is Entity
推荐答案
嗨Gentlehag,
Hi Gentlehag,
如果我错了,请纠正我,但是你的Observable。创建代码是同步的,这意味着在while循环结束之前不会返回一次性。
Correct me if I'm wrong, but your Observable.Create code is synchronous, meaning the disposable won't be returned until the while loop is finished.
正确吗?
Observables应该是异步的。如果您的数据访问层无法异步执行查询,您可以执行以下操作;
Observables are supposed to be asynchronous. If your data access layer has no means of executing a query asynchronously, you could do something like this;
(UNTESTED!)
(UNTESTED!)
Observable.Create<Entity>(observer =>
{
var disposable = new CompositeDisposable();
disposable.Add(Scheduler.NewThread.Schedule(() =>
{
IDataReader reader = null;
//...Getting the DatAReader
disposable.Add(reader);
try
{
while (reader.Read())
{
entity = readertoEntity(reader);
observer.OnNext(entity);
}
observer.OnCompleted();
}
catch(ObjectDisposedException)
{
}
catch(Exception ex)
{
observer.OnError(ex);
}
}));
return disposable;
});
这篇关于取消冷可观测量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文