取消冷可观测量 [英] Cancelling Cold Observables

查看:111
本文介绍了取消冷可观测量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆