【发布时间】:2017-05-11 20:40:16
【问题描述】:
如果我在IObservable 上使用ToEnumerable 扩展,则用户可能不会迭代所有元素。在那种情况下,Observable.Create 中声明的IDisposable 该如何正确处理?
为了争论,假设不能直接将IObservable返回给用户(在这种情况下,用户可以自己实现取消)。
private IObservable<Object> MakeObservable()
{
return Observable.Create(async (observer, cancelToken) =>
{
using(SomeDisposable somedisposable = new SomeDisposable())
{
while(true)
{
Object result = somedisposable.GetNextObject();
if(result == null)
{
break;
}
observer.OnNext(result);
}
}
}
}
public IEnumerable<Object> GetObjects()
{
return MakeObservable().ToEnumerable();
}
public void Test()
{
IEnumerable<Object> e = GetObjects();
int i = 0;
foreach(Object o in e)
{
if(i++ == 10)
break;
}
//somedisposable is not disposed here!!!
}
【问题讨论】:
标签: c# system.reactive rx.net