private System.Tuple <IObservable <EventPattern <HttpProgressEventArgs> >, IObservable <Stream> > ObserveLoad(Loadable loadable) { ProgressMessageHandler progress = null; HttpClientHandler handler = null; var client = Settings.Value.GetHttpClient(Shell.Config, ref progress, ref handler); var data = new[] { String.Format("urn:data:{0}:{1}", NHibernateUtil.GetClass(loadable).Name.ToLower(), loadable.GetId()) }; //review - я не понимаю как это может быть но если сделать dispose у observable //то ожидающий запрос тоже будет отменен и cancellationtoke не нужен //очевидного способа как это может работать нет но как то оно работает var result = Tuple.Create( Observable.FromEventPattern <HttpProgressEventArgs>(progress, "HttpReceiveProgress"), Observable .Using(() => client, c => c.PostAsJsonAsync("Download", data).ToObservable()) .Do(r => r.EnsureSuccessStatusCode()) .SelectMany(r => r.Content.ReadAsStreamAsync().ToObservable()) ); return(Env.WrapRequest(result)); }