C# 异步等待长函数上的并发
我正在尝试同时处理许多任务,因为它们不需要彼此完成才能进入下一个任务。我使用了同步进程,并尝试将其异步化。然而,当测量性能时,这两种方法需要完全相同的时间来完成大约30秒,我希望异步会更快。。。如果我得到了下面的正确答案,我想这就是问题所在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
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());
}