目前我在 Observable.Create() 中使用 await。ExecuteRequestAsync 是一个包装类,用于调用HttpClient.GetAsync 方法(字符串)
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 解决方案?
Task<T>.ToObservable()
做你正在寻找的:
public IObservable<IList<ExampleResponseModel>> ListExamplesRx()
{
var url = string.Format(Routes.Examples.List);
return ExecuteRequestAsync<IList<ExampleResponseModel>>(url, HttpMethod.Get)
.ToObservable();
}
如果你想要一个冷的 observable(即延迟执行),你可以将上面的内容包装在Observable.Defer
.
如果您需要支持取消,请参阅如何从任务创建 IObservable 以便取消订阅取消任务?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句