所以,我一直在开发一个应用程序来使用REST API请求,然而,由于某些原因,API会随机变得无响应(有时候在3秒内就有响应,有时候请求需要很长时间才会抛出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并不是最佳解决方案,如何改进我的代码将不胜感激!