. net核心的异步请求

本文关键字:请求 异步 核心 net | 更新日期: 2023-09-27 18:15:28

我需要一点帮助来找出我的问题。我用过ASP。.NET核心,我很熟悉,虽然。NET核心c#似乎是"崩溃"和退出时,试图使我的异步请求。

我有一个方法返回系统的外部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();

任何帮助都是感激的,希望我没有忽视什么。

谢谢!

. net核心的异步请求

你提出的解决方案一点也不好。

  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为异步方法,不能等待。也就是说,你只要打个电话就行了。你不会捕获任何异常,你不会得到任何返回值

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