如何等待API响应从Pending变为完成?

问题描述 投票:0回答:1

这个问题经常被问到,但很少得到回答,据我所知,在这种情况下根本没有,尽管我很乐意被证明是错误的,即使会损失一些声誉点。 ;-)

我在 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();
}

但这抱怨我不能多次提出相同的请求。

有什么想法可以做到这一点吗?

c# api asynchronous async-await
1个回答
0
投票

您当前正在使用长轮询的变体来检查您的回复的状态。然而,如果没有退出条件,无限循环很容易陷入困境。

如果您可以控制 API 以及与 API 交互的代码,那么发布者/订阅者模型将比长轮询更好。我建议创建一个新的 API(监听器),它可以在其他进程完成时接收事件。

public async Task WorkCompleted(WorkCompletedEventData data) {
  // do something with the event data
}
© www.soinside.com 2019 - 2024. All rights reserved.