1

次のタスクに進むためにお互いを完了する必要がないため、多くのタスクを同時に処理しようとしています。私は同期プロセスを使用して、それを非同期にしようとしました。ただし、パフォーマンスを測定する場合、両方の方法が完了するまでにまったく同じ時間(約30秒)かかると思います...非同期がより高速になると思います... 1)以下が正しい場合2)非同期が何に役立つかを理解する(これが問題だと思います)。

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

}

4

1 に答える 1

5

asyncスレッドプールでコードを実行しません。CPUにバインドされたコードを別のスレッドで実行する場合は、次を使用する必要がありますTask.Run

Task ProcessAsync(int seed){
  var task = new ExpensiveTask(seed);
  return Task.Run(() => task.Process());
}
于 2013-02-07T13:59:06.560 に答える