我不确定我是否正确提问,请耐心等待。这是我正在处理的:我在Task.Run(()=> MyTask).Result之间输了什么,等待MyTask和MyTask.Result?
在我的MVC4项目(targetting。净4.5.1)如果我做await SomeAsyncMethod(...)
,然后任务在后台完成,但似乎永远不会返回。我相信这与线程被返回到池然后在不同的线程上恢复有关。我一直在使用的解决方法是使用Thread.Run(() => SomeTask).Result;
。
所以,我发现自己必须在我的MVC项目中做很多Thread.Run(() => SomeAsyncMethod).Result;
以免最终导致死锁。这不就是同步运行任务的另一种语法吗?我不确定这是否是MVC 4(与MVC 5)的限制,或者这只是api的工作原理。通过这样做,我在异步性方面基本上没有获得什么?我们已经写了一个小型库,其中所有的操作都是async Task<T>
,它在一个单独的程序集中,所以至少我们可以在其他地方“正确地”使用它(例如窗口电话应用程序),但是此MVC 4项目是上述图书馆的消费者,感觉就像我们基本上在异步/等待中获益,以避免死锁,所以我在寻找帮助来看到这里的大局。这将有助于更好地理解我通过在同步管理器中使用异步任务(如果有的话),我失去了什么,如果有一个解决方案让我能够在不发生死锁的情况下等待这些任务,以及是否不是的情况是MVC 4 MVC 5+
TIA
你可能想看看在http://stackoverflow.com/questions/13489065/best-practice-to-call-configureawait-for-all-server-side答案(和评论) -code – Jcl