目前我在Observable.Create()中使用await。 ExecuteRequestAsync是一个调用HttpClient.GetAsync Method (String)
的包装类 public IObservable<IList<ExampleResponseModel>> ListExamplesRx()
{
return Observable.Create<IList<ExampleResponseModel>>(
o =>
{
try
{
var url = string.Format(Routes.Examples.List);
IList<ExampleResponseModel> exampleResponse = await ExecuteRequestAsync<IList<ExampleResponseModel>>(url, HttpMethod.Get);
o.OnNext(exampleResponse);
o.OnCompleted();
}
catch (Exception e)
{
o.OnError(e);
}
return Disposable.Empty;
}
);
}
这是最佳做法吗?有没有更合适的rx解决方案?
答案 0 :(得分:5)
Task<T>.ToObservable()
执行您正在寻找的内容:
public IObservable<IList<ExampleResponseModel>> ListExamplesRx()
{
var url = string.Format(Routes.Examples.List);
return ExecuteRequestAsync<IList<ExampleResponseModel>>(url, HttpMethod.Get)
.ToObservable();
}
如果您想要冷可观察(即延迟执行),您可以将上述内容包含在Observable.Defer
中。
如果您需要支持取消,请参阅How to create IObservable from Task such that unsubscribing cancels the task?