我试图了解两种情况之间代码行为的差异:
我理解第二个会因为我们立即等待其中一个而变慢。
整个功能:
public async Task<string> TestAsyncTimeout()
{
var test =WebRequest.Create("https://10.11.12.13");
var t = test.GetResponseAsync();
//if (t != await Task.WhenAny(t, Task.Delay(500)))
if (t != Task.WhenAny(t, Task.Delay(150)).Result)
{
Console.WriteLine("Timed out");
test.Abort();
Console.WriteLine("Request aborted");
throw new Exception("Timed out");
}
return (await t).ContentLength.ToString();
}
此函数调用非现有IP并始终超时。
为什么案例2)从TaskScheduler抛出未观察到的未观察到的异常: System.Net.WebException:请求已中止:请求已取消。
虽然案例1只会抛出超时&#39;例外但从未如此?
我在等待函数之外的任务: try {task.Wait()} catch {log exception}
谢谢, 詹姆斯
答案 0 :(得分:0)
差异似乎是由后台任务的处理方式引起的。 当我在两个请求完成后开始强制GC运行时,两种情况都抛出了未观察到的异常。