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");