假设您有一个Web处理程序,它调用这样的异步方法:
var foo = await SomeMethod();
而且,由于编码不佳(没有CancellationToken,没有超时等),SomeMethod
永远不会完成。反过来,沮丧的用户在她的浏览器上按下“停止”并转到酒吧。
假设这种情况发生在很多用户身上。
我知道我可以写一个超时来防止它永远等待,但如果我不这样做......会发生什么?这是内存泄漏吗?它最终会被清理干净吗?什么是最糟糕的情况?
答案 0 :(得分:3)
SomeMethod永远不会回来。用户取消请求并转到酒吧。
这些都不是一回事。
如果SomeMethod
永远不会完成,那么就会发生内存泄漏。 You should never, ever, ever write code that does this.
OTOH,如果用户取消请求(取消CancellationToken
),那么方法将完成,可能使用OperationCanceledException
。
答案 1 :(得分:2)
这取决于SomeMethod返回的Task的实现。该任务负责调用continuation(ContinueWith),这将继续执行执行。如果任务从未继续,则会出现内存泄漏。大多数异步API都会提供超时,以防止出现这种情况。