Esempio n. 1
0
        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));
        }