2016-09-23 3 views
0

В консольном приложении я создал список задачи, в которых им необходимо добавить три асинхронные задачу:Запуск несколько HttpResponseMessage задач в последовательности

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 Задачи:

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

Проблема заключается в том, что они работают параллельно, и нет сериализованного порядка задач. Я много искал, но у меня не получилось подходящее решение для их запуска последовательно. Для справки см изображение ниже:

RUN1: enter image description here

RUN2: enter image description here

RUN3: enter image description here

+0

http://stackoverflow.com/questions/39603997/processing -tasks-sequential/39614002 # 39614002 –

+0

Вы хотите посмотреть ответы в [this] (http://stackoverflow.com/questions/32318860/async-method-not-running-in-parallel) Вопрос. –

ответ

0

Вы должны быть опущены код, а даже если задачи выполняются в произвольном порядке r, ваш заказ 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(); 
}