我有一台 1 核机器,我想使用 async 和 await 来提高我的代码性能。代码有两个主要部分。第一个IO操作。(从 azure 服务总线队列中读取多个 sessionId),第二个,处理数据 - CPU 很重。我将 DequeueAsync 方法包装在一个返回任务的异步方法中:
private async Task<SomeReturnValue> AcceptFromQueueAsync(){
try{
SomeReturnValue result = await DequeueAsync.configureAwait(false);
return SomeReturnValue;
}
catch{
//logging and stuff
}
CPU 重的方法是 sync: DoSyncWork() 由于第二部分是 CPU 重的我不想使用并行(实际上不能...) CPU 部分只能在 IO 部分完成时启动。鉴于以上是以下实现与 1 个 cpu 机器一起使用的方法吗?
private void AcceptAndProcessWrapper(){
//Count is some cosnt defined outside the method
_acceptTasks = new List<Task<SomeReturnValue>>();
for (var i = 0; i < Count; i++)
{
_acceptTasks.Add(AcceptFromQueueAsync());
}
//The use of list is for convince in processing
Task.WaitAll(_acceptTasks.ToArray());
//The CPU part
Task.Run(DoSyncWork).Wait();
}
我知道我不能将 Task.Run() 用于同步部分,但我想允许在多个内核上实现功能(通过使用 Task.Run() 启动多个任务并将它们保存在一个数组中)以上实现. (多次调用返回任务的异步方法)提高性能?或者我应该为每个异步调用启动一个新任务,例如 Task.Run(AcceptFromQueueAsync)?