FromAsyncPattern 会关闭我的网络响应吗:
var o = Observable.Return(HttpWebRequest.Create("http://foo.com"))
.SelectMany(r => Observable.FromAsyncPattern<WebResponse>(
r.BeginGetResponse,
r.EndGetResponse)())
.Select(r => r.ContentLength);
// The response is now disposed
还是我必须手动完成?
var o = Observable.Return(HttpWebRequest.Create("http://foo.com"))
.SelectMany(r => Observable.FromAsyncPattern<WebResponse>(
r.BeginGetResponse,
r.EndGetResponse)())
.Select(r => Tuple.Create(r, r.ContentLength))
.Do(t => t.Item1.Close())
.Select(t => t.Item2);
如果我必须手动完成,有没有比这更好的方法?
Observable.Using
可用于此目的:
var o = Observable.Return(HttpWebRequest.Create("http://www.google.com"))
.SelectMany(r => Observable.FromAsyncPattern<WebResponse>(
r.BeginGetResponse,
r.EndGetResponse)())
.SelectMany(r =>
{
return Observable.Using( () => r, (resp) => Observable.Return(resp.ContentLength));
});
我是一名优秀的程序员,十分优秀!