ct5*_*845 1 c# async-await c#-5.0
我正在尝试同时处理许多任务,因为他们不需要每个人完成任务以进入下一个任务.我使用了同步过程并尝试将其变为异步.但是衡量业绩时,这两种方法采取完全相同的时间才能完成(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();
}
Run Code Online (Sandbox Code Playgroud)
}
async不会在线程池上运行您的代码.如果要在不同的线程上执行CPU绑定代码,则需要使用Task.Run:
Task ProcessAsync(int seed){
var task = new ExpensiveTask(seed);
return Task.Run(() => task.Process());
}
Run Code Online (Sandbox Code Playgroud)