2017-04-21 75 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

你並沒有開始'任務'中的新任務。 – 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)); 

如果你想要做身邊的一些工作它可以構建一個異步lambda並調用它:

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

謝謝。但是在它之前和之後需要做些什麼..也許我需要第三種方法?我傾向於如果我可以用匿名方法做 – Blendester

+0

或者使用鏈接'ContinueWith()' – Rahul