为什么在 Task.Run 参数中使用的外部变量被认为是未分配的?
Why is the external variable used in the Task.Run argument considered unassigned?
在下面的代码中:
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;
}
瞧。这不仅会编译,还会 return 9999(如预期)。
为什么result
在第一个例子中被认为是未赋值,而在Task.Run
语句中明明已经赋值了?
编译器不够智能,无法知道 lambda () => result = 999
是否会被执行,因为它不知道 Task.Run
.
的内部结构
因为它不知道 lambda 是否会 运行 它希望你保证 result
在 return
表达式之前赋值给它。
在下面的代码中:
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;
}
瞧。这不仅会编译,还会 return 9999(如预期)。
为什么result
在第一个例子中被认为是未赋值,而在Task.Run
语句中明明已经赋值了?
编译器不够智能,无法知道 lambda () => result = 999
是否会被执行,因为它不知道 Task.Run
.
因为它不知道 lambda 是否会 运行 它希望你保证 result
在 return
表达式之前赋值给它。