gpt4 book ai didi

c# - 在 asp.net 中等待 GetByteArrayAsync 不返回

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:57 25 4
gpt4 key购买 nike

以下代码在从 ASP.NET 应用程序调用时挂起:

private async Task<XPathNavigator> UspsCreateAndPostRequest(string sUrl)
{
HttpClient client = new HttpClient();
byte[] urlContents = await client.GetByteArrayAsync(sUrl);
string sResponse = System.Text.Encoding.UTF8.GetString(urlContents);
... //more code to return XPathNavigator object based on response
}

如果我改成跟随它就可以正常工作:

private async Task<XPathNavigator> UspsCreateAndPostRequest(string sUrl)
{
HttpClient client = new HttpClient();
byte[] urlContents = null;
var task = Task.Run(async () => { urlContents = await client.GetByteArrayAsync(strUrl); });
task.Wait();
string sResponse = System.Text.Encoding.UTF8.GetString(urlContents);
... //more code to return XPathNavigator object based on response
}

方法签名返回是一个 Task 是否导致了这个问题?谢谢。

最佳答案

在调用堆栈的较高位置,有一个 .Wait() 正在对从 UspsCreateAndPostRequest 返回的任务执行。

因为您将调用包装在 Task.Run 中,所以您丢失了执行上下文,这就是它起作用的原因。做

private async Task<XPathNavigator> UspsCreateAndPostRequest(string sUrl)
{
HttpClient client = new HttpClient();
byte[] urlContents = await client.GetByteArrayAsync(sUrl).ConfigureAwait(false);
string sResponse = System.Text.Encoding.UTF8.GetString(urlContents);
... //more code to return XPathNavigator object based on response
}

可以用更少的资源实现相同的目标(但将等待修复在链上更高的位置会更好)。

关于c# - 在 asp.net 中等待 GetByteArrayAsync 不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003557/

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