阅读Stephen Cleary关于eliding async and await的博文后,我决定去玩它。我使用 Visual Studio For Mac 编写了非常简单的HttpClient控制台应用程序。
public static async Task Main(string[] args)
{
Console.WriteLine(await Get());
Console.WriteLine("Hello World!");
}
public static Task<string> Get()
{
using (var http = new HttpClient())
return http.GetStringAsync("http://google.com");
}
根据博客文章,它应该抛出异常但它没有。如果我切换到Windows并尝试运行此应用程序,我将按预期获得TaskCancelledException,但在macOS上它完全正常。
Proof that Google.com was printed into console without exception on macOS
我相信这种行为背后的原因是两个平台上HttpClient中IDisposable的不同实现,但是......为什么?
答案 0 :(得分:1)
将mono repository与我发现的dotnet repository进行比较,HttpClient的单声道实现不会在Dispose方法中调用CancellationTokenSource.Cancel(),我相信这是平台之间不一致的原因。