2017-04-07 51 views
2

在.NET 4.5中,使用異步/等待模式,通過在異步控制器方法中包含CancellationToken,可以輕鬆取消Web請求。這當然可以傳遞給任何異步實體框架方法,整個事情可以很好地取消。如何在異步/等待之前的舊時間取消WebAPI請求?

但是回溯6年,在異步的日子之前,WebAPI或MVC控制器方法是如何取消的?它甚至有可能嗎?如果是這樣,是否有可能取消這些取消請求中的長時間運行的實體框架查詢?

我的詢問動機是我運行了一些實驗,發現在幾乎所有情況下,我的大型EF查詢的同步版本比它們的異步版本更快。異步版本的時間延長了10%到50%。此外,我的應用程序僅供內部使用,並且實際上只能爲最多3個併發用戶提供服務,因此可擴展性不是問題。

總之,我想要老式的同步實體框架方法(因此,同步控制器方法)的速度,但具有可取消性。

回答

6

但是回溯到6年前,在async之前,WebAPI或MVC控制器方法是如何取消的?它甚至有可能嗎?如果是這樣,是否有可能取消這些取消請求中的長時間運行的實體框架查詢?

舊版ASP.NET使用Thread.Abort來取消同步請求。這當然最終會導致應用程序不穩定,所以ASP.NET將定期回收您的應用程序域(和服務進程)。

我不確定遺留的ASP.NET是否使用Thread.Abort取消異步請求(當他們正在運行代碼時,我的意思是)。我會這樣認爲,但我不確定。

作爲最後一個注意事項,請通知英孚團隊您的表現問題。

相關問題