为什么Task.Run参数中使用的外部变量被视为未分配



在以下代码中:

async Task<int> Foo()
{
int result;
await Task.Run( () => { result = 9999; } );
return result;
}

VS 2015报告错误:"使用未分配的局部变量'result'"。所以,让我们做一个改变:

async Task<int> Foo()
{
int result = 0;
await Task.Run( () => { result = 9999;} );
return result;
}

瞧。这不仅会编译,还会返回9999(正如预期的那样(。

为什么result在第一个例子中被认为是未分配的,而它显然是在Task.Run语句中分配的?

编译器不够聪明,无法知道是否要执行lambda() => result = 999,因为它不知道Task.Run的内部。

因为它不知道lambda是否会运行,所以它希望您保证resultreturn表达式之前有一个值分配给它。

最新更新