[英]What is the difference between Task.Run() and await Task.Run()?
[英]Difference between Task.Run and QueueBackgroundWorkItem in Asp.Net
究竟有什么區別
Task.Run(() => {
LongRunningMethod();
});
要么
HostingEnvironment.QueueBackgroundWorkItem(clt => LongRunningMethod());
我在Asp.Net MVC應用程序上進行了測試,在該應用程序中,我在使用Task.Run或QBWI調用的異步任務中繼續在文本文件中寫入一行約10分鍾。
使用Task和QBWI都可以。 我的異步方法一直寫入該文件,直到10分鍾沒有任何問題。 我沒有觀察到IIS對其回收的干擾。
那么QueueBackgroundWorkItem有什么特別之處呢?
下面的文章解釋了類似於你正在做的事情,如果你進入最后一節“幾點思考......”,你會看到兩者之間突出的區別
基本上它說使用queuebackgroundworkitem任務是在ASP.Net運行時注冊的,如果進程關閉或崩潰,ASP.NET運行時仍然會給進程完成一些寬限期。它還涉及向進程發送通知以便它可以結束並執行任何完成任務,而當您使用Task.Run時,所有這些都不可用
AppDomain關閉只能延遲90秒(實際上是HttpRuntimeSection.ShutdownTimeout和processModel shutdownTimeLimit的最小值)。 如果排隊的項目太多而無法在90秒內完成,則ASP.NET運行時將卸載AppDomain而不等待工作項完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.