控制器处置方面的任务与无效

时间:2017-08-03 22:54:07

标签: c# asp.net-web-api

当我使用vlcIntent.setComponent(new ComponentName("org.videolan.vlc", "org.videolan.vlc.gui.video.VideoPlayerActivity"));作为控制器的返回类型时,我看到控制器在操作完成之前被处理掉了,我得到了

  

"异步模块或处理程序在异步时完成   操作仍未完成。"

错误。

void

但是如果我使用public async void Test(){ SomeResult result = await GetSomethingAsync(); int a = result.b; } 而不是Task,则在操作完成后处理控制器。

为什么会出现这种情况?

1 个答案:

答案 0 :(得分:1)

简而言之,因为MVC框架无法等待“void”:)

你的控制器的动作不是管道的末端,实际上它在middle.的某个地方所以当你将你的动作的返回类型设为“void”时,执行代码的线程就存在了你的“测试” “方法并开始执行调用它之后的内容。由于它不能等待它,它假定动作已经完成执行并且框架可以“杀死”你的控制器。

如果查看source code,您会发现这两种情况以不同的方式执行。特别是没有等待返回“void”的那个。我建议一直使用async / await flow,而不是返回“void”。

您是否有理由要返回类型为“void”?