首页 新闻 搜索 专区 学院

Web Api 异步模块或处理程序已完成,而当时仍有异步操作处于未定状态

0
悬赏园豆:20 [已解决问题] 解决于 2015-07-08 17:43


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,详细信息:
“异步模块或处理程序已完成,而当时仍有异步操作处于未定状态”。

问题补充:

api方法加上返回值,例如string,还是返回一样的错误信息!

疯狂的懒羊羊的主页 疯狂的懒羊羊 | 初学一级 | 园豆:76
提问于:2015-07-08 17:20
< >
分享
最佳答案
0

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);
        //另外的一些逻辑
    }
} 
收获园豆:20
dudu | 高人七级 |园豆:38805 | 2015-07-08 17:38

原来是这样一路改下来……之前就看到你的解决办法了,但我并没有一路把所有的异步方法都这样修改!已经解决了,非常感谢!

疯狂的懒羊羊 | 园豆:76 (初学一级) | 2015-07-08 17:42

@dudu:

再请教一下,为什么这样修改? 

webapi中的方法所调用的所有异步代码都需要以Task返回?

疯狂的懒羊羊 | 园豆:76 (初学一级) | 2015-07-08 17:46

@陌上青青草: 推荐看一下这篇博文:ASP.NET sync over async(异步中同步,什么鬼?)

dudu | 园豆:38805 (高人七级) | 2015-07-08 17:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册