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

时间:2017-08-31 01:05:00

标签: c# variable-assignment

在以下代码中:

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

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

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

瞧。这不仅编译,它将返回9999(如预期的那样)。

为什么resultTask.Run语句明显分配时,在第一个示例中被认为是未分配的?

1 个答案:

答案 0 :(得分:4)

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

因为它不知道lambda是否会运行,所以要保证resultreturn表达式之前为其分配值。