【发布时间】:2011-12-17 09:27:55
【问题描述】:
我正在使用 FromEventPattern,我希望能够在我的 observable 的 finally 块中进行一些清理。现在 finally 块没有被调用。我的理解是我必须在某个地方调用 OnCompleted...,但不确定如何实现它。我的 Silverlight 程序中的一些代码:
public IObservable<string> StartDownload ( string uri )
{
WebClient wc = new WebClient();
var o = Observable.FromEventPattern<DownloadStringCompletedEventArgs>( wc, "DownloadStringCompleted" )
.Select( s => s.EventArgs.Result );
wc.DownloadStringAsync( new Uri( uri ) );
return o;
}
public void TestRx ()
{
var anobs = StartDownload( "http://www.google.com" );
anobs
.Subscribe( stuff =>
{
// do stuff
} );
anobs
.Finally( () =>
{
// not called?
} );
}
更新: 显然,我认为 OnCompleted() 可以解决我的问题的假设是错误的。我尝试将 StartDownload 更改为以下内容,但仍然没有调用 finally。这是怎么回事?
public IObservable<string> StartDownload ( string uri )
{
WebClient wc = new WebClient();
var subject = new AsyncSubject<string>();
wc.DownloadStringCompleted += ( sender, e ) =>
{
if ( e.Error != null )
subject.OnError( e.Error );
subject.OnNext( e.Result );
subject.OnCompleted();
};
wc.DownloadStringAsync( new Uri( uri ) );
return subject;
}
【问题讨论】:
-
查看我对类似问题的回答:stackoverflow.com/questions/3801505/…
标签: system.reactive