Task.run принимает два потока в запросе asp. net? - PullRequest
0 голосов
/ 11 июля 2020

Уровень обслуживания

public async Task<string> getAllAsync()
{
   return await WCFMethodAsync();
}

Уровень представления

public class Customer  : Controller
{
   public async Task<string> Index()
  {
      var r = await Task.Run(getAllAsync());
    return r;

  }
}

Я опишу, что, по моему мнению, происходит. Я хотел бы знать, ошибаюсь ли я.

  1. запрос принимает поток из ThreadPool

  2. await возвращает неполную задачу

  3. Task.Run ставит задачу в очередь на выполнение getAllAsync 3.1. который возьмет поток из ThreadPool.

  4. , когда метод getAllAsync завершает работу, взятый поток возвращается в группу потоков

  5. когда завершение вызова метода службы. net извещается, и из группы потоков берется поток для завершения запроса.

Куда возвращается незавершенное домашнее задание? Поскольку метод был выполнен внутри Task.Run.

, я хотел бы знать поток всего процесса.

Поскольку поток был первоначально взят из группы потоков, а task.run принимает рабочий поток, вопрос в том, когда задача завершает задание (wcf) и поток берется для завершения sh запроса. Сколько потоков было использовано для обработки запроса?

1 Ответ

0 голосов
/ 13 июля 2020

Ваш метод getAllAsync является связанной операцией ввода-вывода, поскольку вы выполняете сетевой вызов для доступа к экземпляру службы WCF.

Это означает, что getAllAsync будет выполняться сетевым драйвером. Это асинхронная неблокирующая задача обещания . Вызывающий поток не блокируется, пока не завершится операция асинхронного ввода-вывода. Когда он закончит, ThreadPool получит уведомление об этом.

С другой стороны, Task.Run предназначен для операций с привязкой к ЦП.

Task.Run возвращает задачу делегата и используется для постановки работы в очередь на ThreadPool. Эта работа будет обработана одним из ядер ЦП.

Итак, если вы поместите вызов асинхронного ввода-вывода (запуск) в выделенный поток, то это будет просто напрасной тратой ценных ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...