【发布时间】:2020-09-14 17:40:20
【问题描述】:
所以,我一直在开发一个使用 REST API 请求的应用程序,但是,由于某种原因,API 随机无响应(有时它会在 3 秒内给出响应,有时请求会花费很长时间以至于它抛出a timeOutexception) 所以每当我使用呼叫时,如果在一定时间内没有检索到响应,我会使用此代码重新启动呼叫:
bool taskCompletion = false;
while(taskCompletion == false)
{
try
{
using (CancellationTokenSource cts = new CancellationTokenSource())
{
cts.CancelAfter(timeSpan);
await task(cts.Token);
taskCompletion = true;
}
}
catch (OperationCanceledException)
{
taskCompletion = false;
}
}
我的 API 请求之一如下:
public static async Task<Result> task(CancellationToken ct)
{
string Url = baseurl
ApiHelper instance = new ApiHelper();
using (HttpResponseMessage response = await instance.ApiClient.GetAsync(Url, ct))
{
if (response.IsSuccessStatusCode)
{
var x = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ResultL>(x);
if (result.result.Count() != 0)
return result.result[0];
else
return null;
}
return null;
}
}
我不认为每次对代码使用的每个不同 API 请求都使用 try-catch 是最好的解决方案,我们将非常感谢任何有关如何改进我的代码的帮助!
【问题讨论】:
标签: c# rest asynchronous servicenow