使用.NET核心

时间:2016-10-27 19:25:08

标签: c# .net console-application .net-core dotnet-httpclient

我需要一点帮助来找出问题所在。我已经使用过ASP.NET核心,而且我对它非常熟悉,尽管.NET核心C#似乎已经崩溃了#34;在尝试发出异步请求时退出。

我有一个返回系统外部IP的方法

private async Task<string> getExternalIP()
    {
        using (System.Net.Http.HttpClient HC = new System.Net.Http.HttpClient())
        {
            return await HC.GetStringAsync("https://api.ipify.org/");
        }

    }

这应该可以,但是当它到达HC.GetStringAsync时会退出。我也试过在它上面设一个断点,但它实际上并没有。

我尝试使用

调用该方法
string Address = await getExternalIP();

任何帮助都是值得感恩的,希望我不仅仅是忽视某些事情。

谢谢!

1 个答案:

答案 0 :(得分:10)

您提出的解决方案并不好。

  1. 同步
  2. 可能导致死锁
  3. 作为替代方案,尝试这种方法:

    private async Task<string> GetExternalIP()
    {
        using (HttpClient client = new HttpClient())
            return await client.GetStringAsync("https://api.ipify.org/");
    }
    

    你的调用方法也应该是异步的:

    public async Task CallingMethod()
    {
         // ...
         string address = await GetExternalIP();
         // ...
    }
    

    之前没有为你工作的原因是由async void代替async Task引起的(通过评论猜到了这一点)。

    async void是一种无法等待的异步方法。这意味着,你只需要打电话就可以忘掉它。你不会发现任何异常,你不会得到任何回报值。

    async Task是一个等待的异步方法,不会返回任何内容。它是void同步方法的异步对应物。此外,由于它是等待的,您还可以捕获异步代码可能出现的任何异常。