【问题标题】:Why is the external variable used in the Task.Run argument considered unassigned?为什么 Task.Run 参数中使用的外部变量被视为未分配?
【发布时间】:2017-08-31 01:04:59
【问题描述】:

在以下代码中:

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

VS 2015 报错:“Use of unassigned local variable 'result'”。所以,让我们做出改变:

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

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

为什么resultTask.Run语句中明显赋值,却在第一个例子中被认为是未赋值?

【问题讨论】:

    标签: c# variable-assignment


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2020-07-01
      • 2013-06-02
      相关资源
      最近更新 更多