2016-08-06 29 views
1

一簡単な質問です。私はこの "論理"と "アーキテクチャ"でいくつかの方法を見つけました。c#asyncメソッドと返信を待つ

public async Task<T> FindAsync(params object[] keys) 
{ 
    return await this.context.FindAsync(keys); 
} 

1つの命令が待ち受けています。メソッドが非同期なので、これを行う必要があります(それ以外の場合はコンパイルエラーが発生します)。 IMHO私はこのパターンを使用すべき理由がわかりません。なぜなら、メソッドが非同期の場合、おそらく異なるタスクを並行して実行したいからです。実行をawaitキーワードと同期させると、メソッドを同期させることができ、.netのマネージスレッドプール機構のすべてのパフォーマンスの向上が緩和されます。 あなたの意見は?私は間違っている?

+0

あなたはawaitを使用する必要はありません。その場合は、asyncキーワードとawaitキーワードの両方を削除する必要があります。おそらく唯一の利点は、このFindAsyncメソッドが例外がある場合に呼び出しスタックに現れることです。 –

+0

'await'はコードを同期させません。 'async' /' await'はスレッドプールとは関係ありません。私の[非同期イントロ](http://blog.stephencleary.com/2012/02/async-and-await.html)が役立つかもしれません。 –

答えて

1

あなたはこのように、このメソッド呼び出している場合:

public Task<T> FindAsync(params object[] keys) 
{ 
    return this.context.FindAsync(keys); // Start and return the task 
} 

await FindAsync(); // this method waits for the task to complete 

を次に、それは、このメソッド内で待つ返すためにどんな意味がありません、あなただけにそれを変更することができますその後、呼び出し元は完了するためのタスクを待機します。

+0

私はあなたに同意します。非同期メソッドの呼び出し側は、コードの一部(非同期メソッド)を並列に最適化して実行するために、すべての非同期メソッドを待機する必要があります。 – user2957271

関連する問題