[英]Do you have to await async methods?
假設您有一個服務API調用。 被調用者在某種程度上對性能至關重要,因此為了不長時間地阻止API調用,需要使用SaveAsync()
方法。 但是,我不能await
它,因為這會阻止API調用與非異步版本一樣長(或者甚至更長)。
我問的原因是:如果你沒有 await
調用,返回的Task
對象是否有可能被垃圾回收? 如果是這樣,會中斷正在運行的任務嗎?
我問的原因是:如果你沒有等待調用,返回的Task對象是否有可能被垃圾回收?
一般來說,不,這不應該發生。 對任務進行排隊的底層TaskScheduler
通常會在完成之前保持對其所需生命周期的引用。 您可以在TaskScheduler.QueueTask
的文檔中看到:
典型的實現將任務存儲在內部數據結構中,該內部數據結構將由將在未來某個時間執行這些任務的線程提供服務。
您真正的問題將出現在ASP.NET SynchronizationContext上,它會在運行時跟蹤任何正在進行的異步操作。 如果您的控制器操作在異步操作之前完成,那么您將獲得異常。
如果您想在ASP.NET中進行“即發即忘”操作,則應確保通過HostingEnvironment.QueueBackgroundWorkItem
或BackgroundTaskManager
將它們注冊到ASP.NET運行時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.