簡體   English   中英

.NET 4.5中不完整的異步任務有什么影響?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM