. 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();
任何帮助都是感激的,希望我没有忽视什么。
谢谢!
你提出的解决方案一点也不好。
- 同步
- 可能导致死锁
作为一种替代方法,请尝试以下方法:
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
同步方法的异步对应。此外,由于它是可等待的,您还可以捕获异步代码上可能出现的任何异常。