在HttpClient上取消异步并等待不会在OSX上引发异常

阅读了Stephen Cleary关于消除异步并等待的博客文章之后,我决定去尝试一下。我使用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上,它的工作原理非常好。


在macOS上无一例外地证明Google.com已打印到控制台中的证明


我相信此行为背后的原因是两个平台上HttpClient中IDisposable的实现不同,但是...为什么?


缥缈止盈
浏览 117回答 1
1回答

慕雪6442864

将单存储库与dotnet存储库进行比较,我发现HttpClient的单存储库实现不会在Dispose方法中调用CancellationTokenSource.Cancel(),我相信这是平台之间不一致的原因。
打开App,查看更多内容
随时随地看视频慕课网APP