.NET 4.5 Async vs. TPL - PullRequest
       31

.NET 4.5 Async vs. TPL

10 голосов
/ 17 ноября 2011

Я начинаю читать о .NET 4.5 Async, но, откровенно говоря, пока не могу получить большую его часть, когда дело доходит до паттерна использования.Поэтому я попытаюсь получить это с помощью прямого вопроса:

Я обычно использую .NET 4 TPL для вызова дорогих веб-сервисов и вызовов БД изнутри моего приложения ASP.NET.Кажется, я могу добиться того же с Async.Это правда?Когда использовать какой?

Заранее спасибо.

Ответы [ 3 ]

15 голосов
/ 17 ноября 2011

TPL - это библиотека для параллельных вычислений..NET 4.5 async - это языковая функция, основанная на TPL, которая упрощает процесс.Это особенно верно, когда у вас есть рабочие процессы с несколькими шагами.

В двух словах, async позволяет вам писать свой код, как если бы он был синхронным, поэтому логический поток остается неизменным.Процесс ожидания завершения задачи, запуска определенного кода, когда это происходит, может быть выполнен очень естественным образом с помощью async.Компиляторы C # 5.0 и VB 11.0 преобразуют ваш код в эквивалентный код C # 4.0 и VB 10.0 с использованием TPL и некоторых новых async связанных типов.

Для превосходного внутреннего объяснения async,см. серию блогов Eduasync Джона Скита.

Итак, как вы решаете, какой использовать?Ну, async в основном абстрагирует от всех сложностей создания последовательности фрагментов кода, которые связаны между собой асинхронными вызовами.Предположительно, когда вы вызываете веб-сервис или обращаетесь к базе данных, вы хотите что-то делать с тем, что возвращается.async позволяет объединить код вызова и обработки, что должно облегчить написание вашего кода, а также облегчить его чтение в дальнейшем.

0 голосов
/ 21 июня 2016

@ Паван о BeginXXX / EndXXX: я думаю, что вы все перепутали.Что касается C #, то существует 3 различных шаблона запуска параллельного кода:

  • Не рекомендуется: Модель асинхронного программирования (APM)
  • Не рекомендуется: Асинхронный шаблон на основе событий(EAP)
  • В актуальном состоянии: асинхронный шаблон на основе задач (TAP)

TPL - это основа, на которой построен TAP.TPL был введен в .NET 4. Хотя TPL и TAP так или иначе используются в документации Microsoft.В любом случае async / await - это только языковая функция, представленная в C # 5, то есть .NET 4.5, для упрощенной поддержки TPL.

BeginXXX / EndXXX принадлежитСтиль APM! Так что он не имеет ничего общего с TPL.Эти несколько версий затрудняют обзор.

0 голосов
/ 17 ноября 2011

Полагаю, внутренне оба .Net TPL и async используют потоки пула потоков. Async может быть упрощенным синтаксисом для обычного шаблона BeginXXX / EndXXX.

Но что более важно, TPL использует поток потоков, и вы не должны использовать его для выполнения дорогостоящих операций, поскольку те же потоки используются самой платформой. Если у вас дорогая операция (как вы уже упоминали), лучше при создании TPL создать новый автономный поток или установить для свойства ThreadSchedular LongRunning.

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