如何从匿名方法返回任务输出?

时间:2017-04-21 14:01:31

标签: c#

我有这个方法:

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);
}

1 个答案:

答案 0 :(得分: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());
}