2017-03-08 25 views
1

ひどいタイトルを残して申し訳ありません、私は正しい仮定をしていることを確認したかっただけです。非同期メソッドで非同期呼び出しスタック

は私が単純化されている3つの方法があるだろう:上記

public async Task Method1() 
{ 
    var obj = await Method2(); 
    //do work on obj 
} 

public Task<object> Method2() 
{ 
    //do some work 
    return Method3();  
} 

public async Task<object> Method3() 
{ 
    //do async work 
    return obj; 
} 

Method2を内部的に何の非同期作業を行いませんが、私の非同期スタックです。それは次のように書き換えることができます

public async Task<object> Method2() 
{ 
    //do some work 
    return await Method3(); 
} 

は、非非同期メソッドとしてそれを残すために優れていることを、私はMethod2として実際に非同期の仕事をしない、正しいですか?私の考えは、スレッドのリソースを必要としないときに保持する余分なステートマシンを作成するオーバーヘッドを節約していることです。

答えて

0

正しい。メソッドが何らかの結果を待つ必要がない場合(つまり、タスクの結果を消費するか、タスクが完了するまで何らかの実行を待つ場合)、async/awaitキーワードを追加せずにメソッドから直接Taskを返すことができます。その返されたタスクは、コールスタックのさらに下流にある呼び出し側が待つことができます。これにより、わずかなオーバーヘッドが削減され、少し少ないコード()が作成されますが、そのコードの量は実際には些細なものです)。

これはパススルーまたは便利な方法でよく見られます。

関連する問題