在循环中使用带有continue的using语句

4

给定以下样例代码:

var count = 0;
while (count < 5)
{
    using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri))
    using (var response = await StaticHttpClient.Client.SendAsync(request))
    {
        if (!response.IsSuccessStatusCode)
        {
            switch ((int)response.StatusCode)
            {
                case 500:
                case 504:
                    continue;
            }
        }
        else
        {  ... }
    }

    count++;
}

这个方法中的IDisposable对象是否会泄漏内存?还是Dispose方法会被正确调用?(switch语句中有很多情况被省略,我不担心效率问题。)
2个回答

9

这个方法中的IDisposable对象会泄漏内存吗,还是Dispose方法会被正确调用?

由于您使用了using语句,因此可回收资源将会被正确地调用Dispose()方法。当您执行continue操作时,在进入下一次循环之前将调用Dispose()方法。


很好。那正是我期望的功能,不过我想确认一下。 - Pete Garafano
谢谢,我自己也在想同样的问题。 - Golvellius

1

使用using语句将始终调用Dispose(),这就是使用它的整个目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接