2017-04-21 18 views
0

私はこの方法できました:匿名メソッドからタスク出力を返す方法は?

public async Task Method1Async() 
{ 
    var foo = 1; 
    var bar = 100; 

    List<Task> tasks = new List<Task>(); 
    for (int i = 0; i < 10; i++) 
    { 
     // add below code here 
    }  
    await Task.WhenAll(tasks); 
} 

を、私はtasks上記にこのコードを追加し、フィニッシュまで、すべてを待ちたい:

// do something 
await Method2Async(foo, bar); 
// do something else 

はどのように私はそれを行うことができますか?おかげで..


は、私はこれを試みたが、永遠にTask.WhenAll待ち:

public async Task Method1Async() 
{ 
    var foo = 1; 
    var bar = 100; 

    List<Task> tasks = new List<Task>(); 
    for (int i = 0; i < 10; i++) 
    { 
     tasks.Add(new Task(async() => 
     { 
      // do something 
      await Method2Async(foo, bar); 
      // do something else 
     } 
    }  
    await Task.WhenAll(tasks); 
} 
+2

あなたは 'tasks'で新しいタスクを開始していません。 – juharr

+2

あなたは[おそらく 'Task'コンストラクタ](https://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html)を使ってはいけません。 –

+0

@juharrごめんなさい申し訳ありませんでした – Blendester

答えて

2

あなただけの直接Taskを追加することができます。

tasks.Add(Method2Async(foo, bar)); 

をあなたの周りにいくつかの仕事をしたい場合非同期ラムダを構築して呼び出すことができます:

for(int i = 0; i < 10; ++i) { 
    Func<Task> f = async() => { 
     //do something 
     await Method2Async(foo, bar); 
     //do something else 
    } 
    tasks.Add(f()); 
} 
+0

ありがとうございます。しかし、それの前後に何かをする必要があります。おそらく私は3番目の方法が必要ですか?私は何とか匿名の方法でそれをやり遂げることができたらと思っています – Blendester

+0

または 'ContinueWith()'を連鎖使用してください – Rahul

関連する問題