Этот код действительно асинхронный? - PullRequest
0 голосов
/ 24 июня 2018

У меня есть код ниже в службе WCF, работающей в IIS Windows Server 2016.

Этот код действительно работает асинхронно? Я спрашиваю вас, потому что DoStep занимает около 350 мс, но когда я отправляю 250 запросов в минуту (1 запрос в 120 мс, моя служба, кажется, имеет значительную задержку.

Является ли эта задержка (около 30 секунд в большинстве вызовов) нормальной? Каждый запрос открывает 19 задач.

Сервер не является чем-то особенным, просто имеет 4 процессора и 64 ГБ ОЗУ

var aAsyncTasks = new Task[19];
AsyncResult = new AsyncDataClass[19];
//Start Process
for(aa=0;aa<18;aa++)
{
    AsyncResult[aa] = new  AsyncDataClass();
    //Start Async Proccess
    Func<Task> aAct = async () {
          await    DoStep( AsyncResult[aa]).ConfigureAwait(false);
    };
    var aCurrentTask = aAct();
    aAsyncTasks[aa] = aCurrentTask;
}
//wait for all tasks
Task.WaitAll(aAsyncTasks);
//Manage all AsyncResults
..............

private async Task DoStep(out AsyncDataClass aResultData)
{
    await Task.Run(  () => {
     // Do Job here. **It takes about 350 ms**
   });
}
...