小编J. *_*aga的帖子

在C#中的async-await块中使用"out"时,不清楚编译器错误

我有一个我正在调用的方法,我想确保它在继续之前完成.我也有兴趣知道它是否成功完成,所以我正在做以下事情:

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 …

c# out task async-await

0
推荐指数
1
解决办法
76
查看次数

标签 统计

async-await ×1

c# ×1

out ×1

task ×1