0

在控制台应用程序中,我创建了一个任务列表,其中我添加了三个异步任务:

static  void Main(string[] args)
        {
List<Task> task_list= new List<Task>();


Task task_1=new Task(async () => await Task_method1());
Task task_2=new Task(async () => await Task_method2());
Task task_3=new Task(async () => await Task_method3());

task_list.Add(task_1);
task_list.Add(task_2);
task_list.Add(task_3);

 Task.WaitAll(task_list.ToArray());
            foreach (Task t in task_list)
            {
                Console.WriteLine("Task {0} Status: {1}", t.Id, t.Status);
            }
Console.ReadKey();
}

下面是 3 Task 的方法定义:

public async Task<HttpResponseMessage> Task_Method1()
{
    //Code for Response

     return Response;
} 
public async Task<HttpResponseMessage> Task_Method2()
{
    //Code for Response

     return Response;
} 
public async Task<HttpResponseMessage> Task_Method3()
{
    //Code for Response

     return Response;
} 

问题是它们并行运行,并且没有序列化的任务顺序。我进行了很多搜索,但没有找到适合串联运行它们的解决方案。有关参考,请参见下图:

运行1: 在此处输入图像描述

运行2: 在此处输入图像描述

运行3: 在此处输入图像描述

4

1 回答 1

0

您一定省略了一些代码,因为即使任务以任意顺序完成,您List的 ' 顺序应该保持不变,但您显示输出时List' 顺序发生变化。

然后重新实际执行它,也许我错过了一些东西,但是如果您希望它们按顺序运行,为什么不这样做:

static void Main(string[] args)
{
    MainAsync().Wait();
}

private async Task MainAsync()
{
    var response1 = await Task_method1();
    var response2 = await Task_method2();
    var response3 = await Task_method3();

    // Write results, etc.

    Console.ReadKey();
}
于 2016-09-25T17:56:45.230 回答