【发布时间】:2020-10-06 14:11:32
【问题描述】:
我有一个带有 POST 方法的 Web API 控制器,我想用它来刷新我的数据并返回它。我的 Crawler 获取 HTML,对其进行解析,并向 SourceObservable 发出一个值,其中包含已解析的数据。一旦Repository.Save(accreditationData) 实际保存,它就可以正常工作。但是返回这个 accreditationDataObservable 不起作用,所以我的 Action 永远不会结束响应,Postman 看起来像是无限期地等待:
[HttpPost]
public async Task<AccreditationData<AllMantainedTableRow>> Post()
{
var savedSubject = new Subject<bool>();
AllMantainedCrawler.SourceObservable.Subscribe(accreditationData => {
Repository.Save(accreditationData);
savedSubject.OnNext(true);
});
var accreditationDataObservable = AllMantainedCrawler.SourceObservable.TakeUntil(savedSubject.AsObservable());
AllMantainedCrawler.SourceSubject.OnNext(new Uri("my URL here"));
return await accreditationDataObservable;
}
我也尝试了Take(1) 而不是TakeUntil 并且还返回ToTask() 而不是可观察的,但得到了相同的结果。有什么建议吗?
【问题讨论】:
-
你为什么使用 Observable 而不是 Task?这会影响其他地方吗?
-
Crawler 有这个 Observable,这是监听新鲜数据的方式。所以我想设置订阅,使用
OnNext请求抓取并返回可观察到的第一个值
标签: c# .net observable system.reactive