Когда и почему бы вам не использовать асинхронное программирование на основе задач в C # 5.0 ASP.NET MVC 4 или Web API - PullRequest
9 голосов
/ 20 марта 2012

Я пытаюсь разобраться с асинхронным программированием в C # 5, и вопрос, который я постоянно задаю себе, состоит в том, почему бы не использовать его постоянно (для ASP.NET MVC 4 или Web API), например, node.jsребята делаете?

Есть ли какие-либо недостатки (ненужные накладные расходы), кроме того, что код не такой простой (что, ИМХО, шутка, поскольку новый синтаксис очень прост для понимания)?

Ответы [ 2 ]

8 голосов
/ 20 марта 2012

В большинстве случаев используйте его повсюду. Вот почему они превратили все, что занимает более 50 мс, в асинхронный вызов:).

Однако он будет иметь те же ловушки, что и любой асинхронный код. Отладка может стать сложнее. Если вы начинаете делать что-то одно, а затем он возвращается к длинной задаче в потоке пользовательского интерфейса, это может привести к ложному замораживанию (пользователь мог двигаться после щелчка, но потом не может, когда ничего не делает так, как он это видит). Etc

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

Итак, да, я бы сказал, используйте его почти везде :) Это отличный шаг для .NET

UPDATE

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

0 голосов
/ 30 октября 2013

Это зависит от операции, связанной с процессором или вводом-выводом, которую вы хотите выполнить на сервере. Вот несколько выдержек из MSDN

Обычно используют асинхронные конвейеры при следующих условиях верны:

Операции привязаны к сети или к вводу / выводу вместо привязки к процессору.

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

Параллелизм важнее, чем простота кода.

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

...