【发布时间】:2022-01-19 02:14:01
【问题描述】:
我正在对几个不同的 URL 进行多次异步调用,两个 url 应该返回相同的结果,但我想比较两者的结果或检查响应中的某些值。我不确定如何在状态代码之外的响应中比较或查找特定值,有没有简单的方法可以做到这一点?还想注意响应,如果失败了,我希望稍后能够在我的代码中跟踪它,以便不再使用该 url,我不确定我将如何处理这个
代码:
private async Task<ClientModel> getClientInfoAsync(string clientID)
{
ClientModel c = null;
try
{
var client = new HttpClient();
//Start requests for all of them
var requests = urls.Select
(
url => client.GetAsync(getURL(url, "Client", clientID))
).ToList();
//Wait for all the requests to finish
await Task.WhenAll(requests);
//Get the responses
var responses = requests.Select
(
task => task.Result
);
foreach (var r in responses)
{
// Extract the message body
var s = await r.Content.ReadAsStringAsync();
if (r.IsSuccessStatusCode)
{
c = r.Content.ReadAsAsync<ClientModel>().Result;
SetLastSuccessfulCommunicationDetails(); //after this call HERE I THINK IS WHERE I WOULD COMPARE RESPONSES AND GO FROM THERE
}
}
}
catch (Exception ex)
{
string errMsg = "Error getting the client info";
//...catch error code here...
}
return c;
}
基本上我不确定如何处理响应,并且根据我的比较和响应状态仅返回一个客户端模型 (c)。让我知道是否需要包含任何进一步的信息
【问题讨论】:
-
“几个不同的 URL”:这是否意味着你知道你正在处理两个 URL,或者会有多个 URL 相互比较?您希望进行什么样的比较?
-
我不确定是否有人可以为您回答这个问题。反应有多相似或不同?响应的顺序重要吗?如果所有回复都“同意”,那么您将使用哪个个人回复作为结果的基础有什么关系。
-
现在它只是两个 url,但它可以更晚,只要响应相似或不同,它们应该在失败之外返回相同的响应,因为 url 向下返回失败。我想我只是想验证他们返回相同的结果的机会,他们没有,至少记录差异,希望澄清一点
-
还要澄清一点,如果响应同意你是对的,我不在乎我使用哪个响应,我想更多地使用它,好像 URL #2 响应失败原因或其他,但#1是成功我想保留#1结果,后来不使用URL#2,因为它失败了这个任务并且任何进一步的对该URL的调用都不会返回成功,因为这个初始失败。我想我不确定我是否需要担心异步调用是否失败,并且总是只调用两个 URL,因为这样做的时间无关紧要
-
@Enigmativity 是的,我认为大部分情况下都可以
标签: c# .net api async-await response