Имеет ли смысл asyn c (одна задача) в MVC? - PullRequest
0 голосов
/ 09 марта 2020

Я использую async / await в MVC, но только когда у меня более одной задачи (WaitAll).

Я понимаю, что иметь только одну задачу хорошо, если пользовательский интерфейс свободен, в случае, если WPF или Windows формы, но имеет ли смысл для MVC иметь только одну задачу и ждать ее?

Я видел это много в коде, в MVC, но я не получить преимущества.

Ответы [ 3 ]

2 голосов
/ 10 марта 2020

HTTP-запросы обрабатываются потоками пула потоков.

Если вы заблокируете поток, он не сможет выполнять другую работу. Поскольку общее количество потоков ограничено, это может привести к истощению пула потоков, и новые запросы будут отклонены - 503.

При использовании асинхронного кода c поток освобождается обратно в пул потоков. становится доступным для обработки новых запросов или продолжений асинхронного кода c.

Как и в клиентских пользовательских интерфейсах, на сервере асинхронный код c полностью связан с быстродействием, а не производительностью. Запросы будут занимать больше времени, но ваш сервер сможет обрабатывать больше запросов.

0 голосов
/ 09 марта 2020

Хороший вопрос. Использование асинхронных методов - это эффективное использование ресурсов, а также предоставление хорошего пользовательского опыта. Каждый раз, когда вам нужно вызвать ресурс, для сбора которого может потребоваться время, рекомендуется использовать asyn c вызов.

Это сделает несколько вещей. Во-первых, в то время как рабочий поток ожидает данные, он может быть, так сказать, переведен в режим «удержания», и этот рабочий поток может делать что-то еще, пока не будут возвращены данные, не будет возвращена ошибка или время ожидания вызова.

Это даст вам второе преимущество. Интерфейс, который пользователь использует для вызова ресурса, будет временно освобожден для выполнения других задач. И в целом, меньше ресурсов сервера потребляются простаивающими процессами.

Я бы порекомендовал посмотреть видео на этой странице здесь: https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async

Вероятно, это самое ясное объяснение, которое может помочь ускорить ваше обучение в asyn c.

0 голосов
/ 09 марта 2020

Это зависит от того, чего вы пытаетесь достичь. Например, если у вас есть несколько вызовов к нескольким службам, вы всегда можете сделать это так, чтобы только последний вызов заставил остальную часть системы «ждать».

Вы можете оптимизировать свой код так, чтобы X асинхронные вызовы к службам начинаются (почти) одновременно, не ожидая друг друга.

 public async Task RunSomethings()
    {
        var something1 = AsyncCall1();
        var something2 = AsyncCall2();
        var something3 = await AsyncCall3();
    }

    private async Task<Something1> AsyncCall1()
    {
        return await Something1();
    }

    private async Task<Something2> AsyncCall2()
    {
        return await Something2();
    }

    private async Task<Something3> AsyncCall3()
    {
        return await Something3();
    }

Надеюсь, это поможет.

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