C# 从Blazor客户端HttpClient.GetJsonAsync调用返回(带数据),但随后超时
我正在制作一个C# 从Blazor客户端HttpClient.GetJsonAsync调用返回(带数据),但随后超时,c#,blazor,C#,Blazor,我正在制作一个Http.JsonAsync(“api/MyController/Users”)调用,返回速度非常快,但在5秒内超时,而不是给我数据 我也打过其他类似的电话,效果很好,但有些奇怪的事情正在发生 我从标准气象服务Blazor客户端模板开始,一切都很好 我从一个按钮事件开始 <button onclick=@load_click>LOAD!</button> @functions { private void load_click() { try
Http.JsonAsync(“api/MyController/Users”)代码>调用,返回速度非常快,但在5秒内超时,而不是给我数据
我也打过其他类似的电话,效果很好,但有些奇怪的事情正在发生
我从标准气象服务Blazor客户端模板开始,一切都很好
我从一个按钮事件开始
<button onclick=@load_click>LOAD!</button>
@functions {
private void load_click()
{
try
{
Logger.Log($"about to call PopulateExistingUsers");
var taskUsers = Http.GetJsonAsync<UsersPageData>("api/ShowerQ/Users");
Logger.Log($"returned from async requesting users");
if (!taskUsers.Wait(5000))
{
throw new Exception($"timeout!");
}
var users = taskUsers.Result;
Logger.Log($"populated existing users ok. Users.Count = {users.Users.Count()}");
}
catch (Exception e)
{
Logger.Log(e.ToString());
}
}
Logger.Log
只做Console.Writeline
,它可以进入浏览器控制台-非常方便
预期:
到控制台的日志输出:
“已填充的现有用户正常。用户数=3”
实际日志:
我得到的结果是:
WASM: 09:31:26.49:about to call PopulateExistingUsers
WASM: 09:31:26.56:returned from async requesting users
WASM: 09:31:31.57:System.Exception: timeout!
WASM: at ShowerQWeb2.Client.Pages.Index.load_click () [0x00048] in C:\Users\XXXX\Source\repos\ShowerQWeb2\ShowerQWeb2.Client\Pages\Index.razor:62
在服务器端(在同一台机器上运行,因此时钟在一小时之外保持同步)
chrome网络调试显示返回的内容:
响应标题:
Date: Mon, 13 May 2019 09:31:26 GMT
{"users":[{"id":1,"name":"David XX"},{"id":2,"name":"Sumith YY"},{"id":3,"name":"David ZZ"}]}
因此,它看起来像是陷入了反序列化的困境?您可能因为滥用异步而陷入了死锁。您不应该调用.Wait()
和.Result
,请正确使用异步代码
首先使方法异步
,并返回一个任务
:
private async Task load_click()
{
// snip
}
然后正确地等待您的HTTP调用:
var users = await Http.GetJsonAsync<UsersPageData>("api/ShowerQ/Users");
var users=wait Http.GetJsonAsync(“api/淋浴Q/users”);
哦,我正在使用Core 3 Preview 5、VS2019、chrome 73(在Edge tho上也一样!),并不是说5秒的超时时间是我自己强加的-我已经尝试了更长的超时时间如果你对你的问题有更新,不要添加评论,而是你的问题。然而,我认为问题正如我在下面的回答中所描述的,我最初是这样做的,但为了简化,我尽可能多地删除了异步。我会把它恢复到原来的状态,然后再试一次,然后再回来,嗯,现在看起来确实有效。我还错过了一个json d/s’ed的无参数构造函数。谢谢。我需要读一点,继续,等等,结果。我以为他们会通过有效地使事情变得简单化
private async Task load_click()
{
// snip
}
var users = await Http.GetJsonAsync<UsersPageData>("api/ShowerQ/Users");