gpt4 book ai didi

c# - HttpClient.GetStringAsync未执行

转载 作者:行者123 更新时间:2023-12-03 16:41:37 28 4
gpt4 key购买 nike

该代码在.NET Standard 2.0中运行。我有一个构造函数,该构造函数调用一个方法,该方法将调用如下所示的Azure函数:

public ChatViewModel(IChatService chatService)
{
Task.Run(async () =>
{
if (!chatService.IsConnected)
{
await chatService.CreateConnection();
}
});
}
方法是这样的:
public async Task CreateConnection()
{
await semaphoreSlim.WaitAsync();

if (httpClient == null)
{
httpClient = new HttpClient();
}

var result = await httpClient.GetStringAsync(uri);

var info = JsonConvert.DeserializeObject<Models.ConnectionInfo>(result);

//... some other code ...
semaphoreSlim.Release();
}
该代码在以下位置停止

await httpClient.GetStringAsync(uri)


URI是100%有效的,如果我将其复制并粘贴到浏览器中,则会得到所需的JSON。
打开Fiddler时,未对URI进行任何调用。
编辑
源代码来自此Github存储库: https://github.com/PacktPublishing/Xamarin.Forms-Projects/tree/master/Chapter06-07/Chat/Chat
奇怪的是,我似乎接到了Azure的电话:
enter image description here
编辑2
此代码有效:
static void Main(string[] args)
{
using (var httpClient = new HttpClient())
{
var a = httpClient.GetStringAsync(uri).GetAwaiter().GetResult();
}
}
该代码不起作用:
static void Main(string[] args)
{
Task.Run(async() => {
using (var httpClient = new HttpClient())
{
var a = await httpClient.GetStringAsync(uri);
}
});
}

最佳答案

我猜您的问题引起了,因为您可能在控制台应用程序(或Windows服务)中运行了它,而没有任何代码片段来使您的应用程序保持事件状态。

This code is not working:


static void Main(string[] args)
{
Task.Run(async() => {
using (var httpClient = new HttpClient())
{
var a = await httpClient.GetStringAsync(uri);
}
});
}

该代码显然不起作用,因为 Task.Run创建了一个后台线程,然后 Main方法立即完成(并且这分别导致您的任务终止)。
只需在 Console.ReadKey()方法的末尾添加 Main使其保持事件状态,您会发现一切正常:
static void Main(string[] args)
{
Task.Run(async() => {
using (var httpClient = new HttpClient())
{
var a = await httpClient.GetStringAsync(uri);
}
});

Console.ReadKey();
}

另一种选择是对C#8中引入的 Main方法使用新的异步入口点:
static async Task Main(string[] args)
{
using (var httpClient = new HttpClient())
{
var a = await httpClient.GetStringAsync(uri);
}
}

关于c# - HttpClient.GetStringAsync未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999839/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com