c# – 在HttpClient上消除异步和等待不会在OSX上抛出异常

在阅读了关于eliding async and await的Stephen Cleary博客文章之后,我决定去玩它.我用HttpClient使用Visual Studio For Mac编写了非常简单的控制台应用程序.

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的不同实现,但是……为什么?

最佳答案
比较mono repositorydotnet repository,我发现,HttpClient的单声道实现不会在Dispose方法中调用CancellationTokenSource.Cancel(),我相信这是平台之间不一致的原因.

转载注明原文:c# – 在HttpClient上消除异步和等待不会在OSX上抛出异常 - 代码日志