ApiController中有一个方法:
Public void Open()
{
Device.Open();
}
Device.Open:
public async void Open()
{
var r= await IsOpened();//bool
if(r)
{
//其他一些逻辑
await Task.Delay(2000);
//另外的一些逻辑
}
}
页面使用ajax来调用webapi,但总是返回错误,状态码500,详细信息:
“异步模块或处理程序已完成,而当时仍有异步操作处于未定状态”。
1.
Public void Open() { Device.Open(); }
改为
public async Task Open() { await Device.Open(); }
2.
public async void Open() { var r= await IsOpened();//bool if(r) { //其他一些逻辑 await Task.Delay(2000); //另外的一些逻辑 } }
改为
public async Task Open() { var r = await IsOpened();//bool if(r) { //其他一些逻辑 await Task.Delay(2000); //另外的一些逻辑 } }
原来是这样一路改下来……之前就看到你的解决办法了,但我并没有一路把所有的异步方法都这样修改!已经解决了,非常感谢!
@dudu:
再请教一下,为什么这样修改?
webapi中的方法所调用的所有异步代码都需要以Task返回?
@陌上青青草: 推荐看一下这篇博文:ASP.NET sync over async(异步中同步,什么鬼?)