Подтвердить что ты не робот

Какая польза от использования ждут при вызове базы данных async

Я просто смотрю проект MVC5 по умолчанию и как он использует async в контроллерах.

Я хотел бы узнать, какое преимущество async предоставляет здесь, просто используя синхронные вызовы:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Disassociate(string loginProvider, string providerKey)
    {
        ManageMessageId? message = null;

        //why use an async database call here with await instead of just using a synchronous one?
        IdentityResult result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
        if (result.Succeeded)
        {
            message = ManageMessageId.RemoveLoginSuccess;
        }
        else
        {
            message = ManageMessageId.Error;
        }
        return RedirectToAction("Manage", new { Message = message });
    }

Что мне не хватает?

Предоставляет ли это какое-то преимущество в производительности для типа ожидания, которое будет происходить здесь?

4b9b3361

Ответ 1

На стороне сервера (например, ASP.NET MVC) любые операции ввода/вывода (например, базы данных) должны выполняться асинхронно. Это освобождает поток запроса за время, в течение которого ввод/вывод находится в полете.

Итак, когда RemoveLoginAsync отправляет свой SQL в базу данных, он возвращает неполную задачу, и когда запрос попадает в await, он возвращает поток запроса в пул потоков. Позже, когда операция БД завершается, поток запросов берется из пула потоков и используется для продолжения запроса.

Конечным результатом является масштабируемость, потому что (в случае, по крайней мере, 99,9%) задачи масштабируются лучше, чем потоки. Тем не менее, нет большого преимущества, если ваша база данных является всего лишь одним сервером, и все запросы попадают в db, потому что узким местом в этом сценарии является сервер db, а не веб-сервер.