[英]What are the implications for incomplete async tasks in .NET 4.5?
假設您有一個Web處理程序,它調用這樣的異步方法:
var foo = await SomeMethod();
並且,由於編碼不佳(沒有CancellationToken,沒有超時等), SomeMethod
永遠不會完成。 反過來,沮喪的用戶在她的瀏覽器上按下“停止”並轉到酒吧。
假設這種情況發生在很多用戶身上。
我知道我可以寫一個超時來防止它永遠等待,但如果我不這樣做......會發生什么? 這是內存泄漏嗎? 它最終會被清理干凈嗎? 什么是最壞的情況?
SomeMethod永遠不會回來。 用戶取消請求並轉到酒吧。
根本不是那些東西。
如果SomeMethod
永遠不會完成,那么就會出現內存泄漏。 你永遠不應該編寫執行此操作的代碼。
OTOH,如果用戶取消請求(取消CancellationToken
),則該方法將完成,可能具有OperationCanceledException
。
它取決於SomeMethod返回的Task的實現。 該任務負責調用continuation(ContinueWith),這將繼續執行執行。 如果任務從未繼續,則會出現內存泄漏。 大多數異步API都會提供超時,以防止出現這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.