异步调用中的异常扰乱了执行
Exception in asynchronous call messes up execution
我正在打两个 httpClient.GetAsync()
电话。
根据要求,两个调用之一将始终抛出 “未知主机” 异常,一个将 return 一个适当的 HttpResponseMessage
对象.
我的问题是在两个异步 httpClient
调用完成后确定布尔值 仅 。
public async Task<bool> BothHttpCallsTask(string hostName)
{
bool response1 = false;
bool response2 = false;
try
{
//httpClient and the GetAsync() are inside this method
response1 = await CheckRedirectionBool(url1);
response2 = await CheckRedirectionBool(url2);
}
catch(Exception e)
{
//when exception is caught here, the method evaluates as false
//as response2 is still not executed
}
return response1 || response2 ;
}
如何让执行仅在两个异步调用成功完成时进行评估(请记住,强制性异常会使 return 语句在响应 2 可以从其执行中获取值之前进行评估)
即使两个 http 调用之一成功,我也需要 return true。
你能简单地将每个包装在它自己的异常处理程序中吗?
例如:
try{
response1 = ...
}
catch(Exception e){
//set some flag here
}
try{
response2 = ...
}
catch(Exception e){
//set some flag here
}
这样您就可以知道哪些过去了,哪些没有过去,并根据该条件设置一些标志,等等。
My problem is determining the bool value only after both async httpClient calls finish.
如果你想像对待返回一样处理异常false
,那么我建议写一个小辅助方法:
async Task<bool> TreatExceptionsAsFalse(Func<Task<bool>> action)
{
try { return await action(); }
catch { return false; }
}
那么用起来就更方便了Task.WhenAll
:
public async Task<bool> BothHttpCallsTask(string hostName)
{
var results = await Task.WhenAll(
TreatExceptionsAsFalse(() => CheckRedirectionBool(url1)),
TreatExceptionsAsFalse(() => CheckRedirectionBool(url2))
);
return results[0] || results[1];
}
我正在打两个 httpClient.GetAsync()
电话。
根据要求,两个调用之一将始终抛出 “未知主机” 异常,一个将 return 一个适当的 HttpResponseMessage
对象.
我的问题是在两个异步 httpClient
调用完成后确定布尔值 仅 。
public async Task<bool> BothHttpCallsTask(string hostName)
{
bool response1 = false;
bool response2 = false;
try
{
//httpClient and the GetAsync() are inside this method
response1 = await CheckRedirectionBool(url1);
response2 = await CheckRedirectionBool(url2);
}
catch(Exception e)
{
//when exception is caught here, the method evaluates as false
//as response2 is still not executed
}
return response1 || response2 ;
}
如何让执行仅在两个异步调用成功完成时进行评估(请记住,强制性异常会使 return 语句在响应 2 可以从其执行中获取值之前进行评估) 即使两个 http 调用之一成功,我也需要 return true。
你能简单地将每个包装在它自己的异常处理程序中吗? 例如:
try{
response1 = ...
}
catch(Exception e){
//set some flag here
}
try{
response2 = ...
}
catch(Exception e){
//set some flag here
}
这样您就可以知道哪些过去了,哪些没有过去,并根据该条件设置一些标志,等等。
My problem is determining the bool value only after both async httpClient calls finish.
如果你想像对待返回一样处理异常false
,那么我建议写一个小辅助方法:
async Task<bool> TreatExceptionsAsFalse(Func<Task<bool>> action)
{
try { return await action(); }
catch { return false; }
}
那么用起来就更方便了Task.WhenAll
:
public async Task<bool> BothHttpCallsTask(string hostName)
{
var results = await Task.WhenAll(
TreatExceptionsAsFalse(() => CheckRedirectionBool(url1)),
TreatExceptionsAsFalse(() => CheckRedirectionBool(url2))
);
return results[0] || results[1];
}