C# 异步等待长函数上的并发

C# 异步等待长函数上的并发,c#,async-await,c#-5.0,C#,Async Await,C# 5.0,我正在尝试同时处理许多任务,因为它们不需要彼此完成才能进入下一个任务。我使用了同步进程,并尝试将其异步化。然而,当测量性能时,这两种方法需要完全相同的时间来完成大约30秒,我希望异步会更快。。。如果我得到了下面的正确答案,我想这就是问题所在 public class ExpensiveTask { private int _seed; public ExpensiveTask(int seed){ _seed = seed; } public Process() { //TODO vari

我正在尝试同时处理许多任务,因为它们不需要彼此完成才能进入下一个任务。我使用了同步进程,并尝试将其异步化。然而,当测量性能时,这两种方法需要完全相同的时间来完成大约30秒,我希望异步会更快。。。如果我得到了下面的正确答案,我想这就是问题所在

public class ExpensiveTask {
 private int _seed;
 public ExpensiveTask(int seed){ _seed = seed; }
 public Process() { //TODO various things }
}

public class Controller {
 public static void main(string[] args){ 
    var program = new Controller();
    program.RunAsync(); // Runtime 36.9s
    program.Run(); // Runtime 36.6s
 }

 void Run(){
     Process(1);
     Process(2);
     Process(3);
 }

 async void RunAsync(){
      var taskList = new List<Task>();
      taskList.Add(ProcessAsync(1));
      taskList.Add(ProcessAsync(2));
      taskList.Add(ProcessAsync(3));

      await Task.WhenAll(taskList);
 }

 async Task ProcessAsync(int seed){
      var task = new ExpensiveTask(seed);

      task.Process();
 }

 void Process(int seed){
      var task = new ExpensiveTask(seed);

      task.Process();
 }
}异步不会在线程池上运行代码。如果要在不同线程上执行CPU绑定代码,则需要使用Task。运行:

async不会在线程池上运行代码。如果要在不同线程上执行CPU绑定代码,则需要使用Task。运行:


我想我只是被新的关键词迷住了。我想我只是被新的关键词迷住了。
Task ProcessAsync(int seed){
  var task = new ExpensiveTask(seed);
  return Task.Run(() => task.Process());
}