在没有并发的情况下处理任务列表

use*_*284 2 c# async-await

鉴于此列表:

var tasks = new List<Task>
{
    MyMethod1,
    MyMethod2,
    MyMethod3
};
Run Code Online (Sandbox Code Playgroud)

还有这些方法:

async Task MyMethod1()
{
    await SomeOtherMethod1();
}

async Task MyMethod2()
{
    await SomeOtherMethod2();
}

async Task MyMethod3()
{
    await SomeOtherMethod3();
}
Run Code Online (Sandbox Code Playgroud)

是否可以在每个按顺序完成的情况下执行此操作task(无并发):

async Task MyMethod1()
{
    await SomeOtherMethod1();
}

async Task MyMethod2()
{
    await SomeOtherMethod2();
}

async Task MyMethod3()
{
    await SomeOtherMethod3();
}
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何完成此操作的方法或示例。foreach只是把它们全部解雇。有await foreach,但Task不包含 的公共实例或扩展定义GetAsyncEnumerator

Ste*_*ary 7

foreach不启动任务。按照惯例,任务返回“热”状态 - 即已经在运行。因此,您拥有任务列表这一事实就意味着它们已经同时运行。

如果您想创建要在将来执行的异步操作列表(即异步委托),那么您需要使用 aList<Func<Task>>而不是 a List<Task>,然后您可以foreach对每个委托进行调用,并await调用返回的任务。