我需要一点帮助来找出问题所在。我已经使用过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();
任何帮助都是值得感恩的,希望我不仅仅是忽视某些事情。
谢谢!
答案 0 :(得分:10)
您提出的解决方案并不好。
作为替代方案,尝试这种方法:
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
同步方法的异步对应物。此外,由于它是等待的,您还可以捕获异步代码可能出现的任何异常。