gpt4 book ai didi

c# - WebMethod 异步结果显示对象

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

我正在尝试使用异步返回结果,但不是返回我想要的数据,而是返回整个对象

[System.Web.Services.WebMethod(BufferResponse=false)]
public static async Task<bool> getLogin(string username, string password)
{
Login login = new Login();
Task<bool> loginVerify = login.verifyLogin(username,password);
await loginVerify;
return loginVerify.Result;
}

public class Login
{
public async Task<bool> verifyLogin(string username, string password)
{
return true;
}
}

Firefox Firebug 的结果显示:

{"d":{"Result":true,"Id":2,"Exception":null,"Status":5,"IsCanceled":false,"IsCompleted":true,"CreationOptions":0,"AsyncState":null,"IsFaulted":false}}

为什么不直接显示结果呢?

我试过运行

public static async Task<bool> getLogin(string username, string password)
{
Login login = new Login();
Task<bool> loginVerify = login.verifyLogin(username,password);
await loginVerify;
return false;
}

但是 Firebug 报告是一样的,只是它在 json 中说 Result false

{"d":{"Result":false,"Id":2,"Exception":null,"Status":5,"IsCanceled":false,"IsCompleted":true,"CreationOptions":0,"AsyncState":null,"IsFaulted":false}}

所以我的问题是为什么它显示整个对象而不是结果?

最佳答案

this answer 中所述,WebMethod不支持async-await(它支持另一种异步模式,APM,你可以转换async-await 到 APM,但这很尴尬)。

那么为什么会得到如此奇怪的结果呢? WebMethod 不知道 Task 是某种特殊类型,因此它通过访问和序列化其属性将其视为常规对象。这包括 Result,它同步返回 Task 的结果。这也意味着代码实际上并不是异步的。

关于c# - WebMethod 异步结果显示对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039869/

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