繁体   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