C# while循环中一次性变量的作用域何时结束?
我有一个while循环,在这个循环中,我用一个内存流做一些事情——即将它传递给其他填充该流或从中读取的对象。代码如下所示:C# while循环中一次性变量的作用域何时结束?,c#,.net,.net-core,scope,C#,.net,.net Core,Scope,我有一个while循环,在这个循环中,我用一个内存流做一些事情——即将它传递给其他填充该流或从中读取的对象。代码如下所示: public async void CaptureImages(CancellationToken ct) { while(!ct.IsCancellationRequested) { await using var memoryStream = new MemoryStream(); await this.camera.C
public async void CaptureImages(CancellationToken ct)
{
while(!ct.IsCancellationRequested)
{
await using var memoryStream = new MemoryStream();
await this.camera.CaptureImage(memoryStream, ct);
await this.storage.StoreImage(memoryStream, ct);
}
}
我的问题是:memoryStream
是在每次迭代中还是在循环结束后进行处理
虽然该问题一般回答了此主题,但它没有明确回答有关While循环中可处置变量的范围的问题。内存流将在
While
循环块的末尾处理,因此,每次while
循环迭代一次。内存流将在while
循环块的末尾进行处理,因此每次while
循环迭代一次。这就是执行代码的方式(我简化了您的方法,只包含必要的部分):
如您所见,
memoryStream
将在每次迭代中处理。您可以在中找到代码编译的中间步骤和结果。这就是代码的执行方式(我简化了您的方法,只包括必要的部分):
如您所见,memoryStream
将在每次迭代中处理。您可以在中找到代码编译的中间步骤和结果。是正确的,但我想进一步解释一下为什么它是正确的:
这实际上是一个关于:
using声明是一个变量声明,前面有using关键字。它告诉编译器要声明的变量应该在封闭范围的末尾处理
基本上,using
声明被编译为using
语句,在封闭范围结束之前结束。
换句话说,您的代码将转换为:
while(!ct.IsCancellationRequested)
{
await using(var memoryStream = new MemoryStream())
{
await this.camera.CaptureImage(memoryStream, ct);
await this.storage.StoreImage(memoryStream, ct);
}
}
现在,当memoryStream
被释放时,这一点非常清楚了——在每次while
迭代结束时。是正确的,但我想展开一点来解释为什么它是正确的:
这实际上是一个关于:
using声明是一个变量声明,前面有using关键字。它告诉编译器要声明的变量应该在封闭范围的末尾处理
基本上,using
声明被编译为using
语句,在封闭范围结束之前结束。
换句话说,您的代码将转换为:
while(!ct.IsCancellationRequested)
{
await using(var memoryStream = new MemoryStream())
{
await this.camera.CaptureImage(memoryStream, ct);
await this.storage.StoreImage(memoryStream, ct);
}
}
现在,当
memoryStream
被处理时,这一点非常清楚了——在每次while
迭代结束时。@Fildor感谢您的评论。这是while条件中的一个输入错误……也不相关:您有理由将此异步无效
而不是异步任务
?@Fidor是。此方法作为后台线程运行。这是否回答了您的问题@帕夫拉尼霍斯基只是部分。我显然对while循环感到困惑。然而,答案告诉我,我没有充分考虑这一点……;)@费尔多:谢谢你的评论。这是while条件中的一个输入错误……也不相关:您有理由将此异步无效
而不是异步任务
?@Fidor是。此方法作为后台线程运行。这是否回答了您的问题@帕夫拉尼霍斯基只是部分。我显然对while循环感到困惑。然而,答案告诉我,我没有充分考虑这一点……;)指向sharpLab的链接非常宝贵!这是一个方便的资源!指向sharpLab的链接非常宝贵!这是一个方便的资源!