我有这个相当简单的逻辑:
class Program
{
static void Main(string[] args)
{
using (TransactionScope ts = new TransactionScope())
{
System.Threading.Tasks.Parallel.Invoke(() =>
{
TransactionScope y = ts;
System.Diagnostics.Debug.WriteLine("Test");
},
() =>
{
System.Diagnostics.Debug.WriteLine("Test");
}
);
ts.Complete();
}
}
}
如果您在这两个语句上放置断点Debug.WriteLine()
,您会注意到当它在第一个语句上中断时,调试器将两者y
都ts
列为本地语句。但是当它在后者中遇到断点时,ts
不会被列为本地,此外,添加ts
到监视窗口会给出The name 'ts' does not exist in the current context.
这个变量是在起作用还是其他机制?我查看了有关变量捕获的文章,但找不到任何明确说明变量仅在使用时才被捕获的内容,但我假设它被称为变量捕获,因为它只“捕获”什么它需要并且不保留对所有可用内容的引用。