.NET 核心的异步请求

Async requests with .NET core

我需要一点帮助来找出我的问题。我使用过 ASP.NET 核心,我对此相当熟悉,尽管 .NET 核心 C# 似乎是 "crashing" 并在尝试发出我的异步请求时退出。

我有一个方法returns系统的外部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. 是同步的
  2. 可能导致死锁

作为替代方法,试试这个方法:

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是异步方法,不能等待。这意味着,您只需调用它而忘记它。您不会捕获任何异常,您不会获得任何 return 值。

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