这个问题经常被问到,但很少得到回答,据我所知,在这种情况下根本没有,尽管我很乐意被证明是错误的,即使会损失一些声誉点。 ;-)
我在 C# 中进行了 API 调用,并且 HttpResponseMessage 立即处于“Pending”状态。
JObject thing = JObject.Parse(await response.Content.ReadAsStringAsync());
thing["status"] // "Pending"
我想也许可以将其包装在一个循环中并一遍又一遍地重试,但“待处理”响应永远不会改变:
while (true) {
JObject thing = JObject.Parse(await response.Content.ReadAsStringAsync());
Task.Delay(1000).Wait();
}
thing["status"] // remains "Pending"
我什至尝试回忆这个循环内的终点:
while (true) {
HttpResponseMessage response = await client.SendAsync(request);
JObject thing = JObject.Parse(await response.Content.ReadAsStringAsync());
Task.Delay(1000).Wait();
}
但这抱怨我不能多次提出相同的请求。
有什么想法可以做到这一点吗?
您当前正在使用长轮询的变体来检查您的回复的状态。然而,如果没有退出条件,无限循环很容易陷入困境。
如果您可以控制 API 以及与 API 交互的代码,那么发布者/订阅者模型将比长轮询更好。我建议创建一个新的 API(监听器),它可以在其他进程完成时接收事件。
public async Task WorkCompleted(WorkCompletedEventData data) {
// do something with the event data
}