0

私が理解していることから、使用するawaitには、 としてマークされているメソッド内にいる必要がありますasync。その場合は、awaiton anyTask<Thing>を使用して、 の結果の値をある程度同期的に取得できますTask

Task<bool> task = new Task<bool>(() => false);
task.Start();

int result = await task;

これを行うには、 でマークされたメソッド内にいる必要がありますasync

ここで聞きたいのは、 の意味とasync、メソッドを でマークした結果はどうなるかということasyncです。

また、この2つの違いは何ですか?

Task<bool> Foo() {
  var task = new Task<bool>(() => false);
  task.Start();
  return task;
}

async Task<bool> Foo2() {
  var task = new Task<bool>(() => false);
  task.Start();
  return await task;
}

どちらもメソッドawait内から使用できます。async

var res1 = await Foo();
var res2 = await Foo2();

体内でFoo2使えるのと使えないのとの違いだけですか?awaitFoo

4

2 に答える 2

3

メソッドに await 式が含まれている可能性があることをコンパイラに警告するだけです。これにより、メソッドの戻り値に対して一貫性チェックを行うことができます。また、コンパイラに組み込まれている書き換えロジックを有効にして、メソッドを隠しクラスに変換します。

メソッド本体で実際にawait演算子を使用しない場合、この書き換えは発生する必要がなく、asyncキーワードも必要ありません。いずれにせよasyncを使用すると、それ以外の場合は無害な警告 (CS1998) が表示され、コードがおそらく意図したものではないことが指摘されます。良い診断。

于 2013-10-12T16:16:51.847 に答える