2017-03-09 5 views
-1

すでに待機しているタスクでawaitを呼び出すのは悪い習慣ですか?パフォーマンスが悪いですか?パフォーマンスが悪い同じタスクで複数の時間を待って呼び出しています

class SomeClass 
{ 
    string Prop1; 
    string Prop2; 
} 

public void SomeMethod() 
{ 
    Task<SomeClass>[] someClassInstanceTasks = Task<SomeClass>[10]; 
    foreach(var task in someClassInstanceTasks) 
    { 
     task = GetSomeClassInstanceAsync(); 
    } 

    someClassInstanceTasks.WaitAll(); 

    SomeClass someClassInstance = someClassInstanceTasks[0].Result; 
    //OR (which is recommended) 
    SomeClass someClassInstance = await someClassInstanceTasks[0]; 
} 

は個人的に、私は、誰かがバグを導入し、WaitAll()文でマックの場合には、追加の安全対策としてのawaitのアプローチを好みます。

+0

あなたの例では '.WaitAll()'を省略していますが、とにかく各タスクを待っている場合は不要です – itsme86

+0

それはどうか –

+0

あなたは 'WaitAll'を待つべきです...あなたは仕事ではなく結果の配列を返すでしょう –

答えて

2

お客様の具体的なの場合は、.Resultとします。結果を得るために完了したTaskawaitに理由がありません。しかしawaitを完了したTaskにしたくない理由は、メソッドasyncをマークする必要があるという事実だけです。その結果、asyncと呼ばれるすべてのメソッドをマークアップするか、

+0

これはコンソールアプリケーションであることはわかっていますか? ASP.NETで '.Result'を呼び出すと、デッドロックが発生する可能性があります。 –

+0

なぜデッドロックですか?タスクは既に完了しています。 – JohanP

+1

http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html –

関連する問題