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