我有一个我正在调用的方法,我想确保它在继续之前完成.我也有兴趣知道它是否成功完成,所以我正在做以下事情:
async void Foo() {
bool success;
// stuff
await Task.Run(
() => Bar(out success)
);
if (!success) { // this is the line causing the compiler-error
// handle
}
// other stuff
}
void Bar(out bool success);
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误
CS0165使用未分配的局部变量'success'
这不是一个大问题,因为我可以变得可爱并初始化success=false并传递它,ref而不是out看起来像希望的那样.但是,我很好奇async-await(或Task.Run)的复杂性似乎会导致一个不保证的情况out success会被正确分配.
任何启示都表示赞赏!
编辑:
要添加更多上下文,以下块编译并执行正常.
void Caller() {
bool success;
Callee(out success);
if (success) {
// do something
}
}
void Callee();
Run Code Online (Sandbox Code Playgroud)
这是因为out参数在传递之前不需要初始化.有关更多信息,请访问out:https …