Практические различия между использованием TPL и асинхронизации
-
27-09-2019 - |
Вопрос
Я ищу использовать любой из упомянутых способов борьбы с длинными эксплуатациями.
Я не буду вдаваться в подробности, что может быть достигнуто, используя каждый из них, но я предпочел бы объяснить, что я хочу сделать.
У меня есть набор методов, связанных с HTTP, каждый извлекает несколько предметов информации. Это все часть большей системы внутри долгого обслуживания (так что это не какой-то один раз, выброс код).
Как правило, какой подход лучше, инкапсуляция и ремонтопригодность.
Я надеюсь, что меня достаточно ясно .. Я решил не поставлять образцы кода, поскольку мне больше интересуется мнениями, советами и возможными подводными камнями, чем в Tidbits конкретной реализации.
Спасибо!
Решение
В целом, задачи TPL намного проще в использовании. В вашем случае создайте их с помощью фабрики и варианта Longrunning.
Я не так уверен в событиях, хотя. Почему бы не обрабатывать запрос / RRESPONSE в цикле или что-то подобное? Ты уже на теме.
Другие советы
Вы также можете использовать конторские установки для обработки данных после завершения задачи для получения.
Task<StockDataCollection> loadFedHistoricalData =
Task<StockDataCollection>.Factory.StartNew(
() => LoadFedHistoricalData(),
TaskCreationOptions.LongRunning);
Task<StockDataCollection> normalizeHistoricalData =
loadFedHistoricalData.ContinueWith(
(t) => NormalizeData(t.Result));
В этом коде задача LoadFedHistoricalData работает LoadFedHistoricalData, которая представляет собой длинную запускную задачу ввода / вывода. Когда это возвращает, он продолжается с другой задачей, которая нормализует данные.
Продолжить с Принимает параметр TaskContinucipyOptions, который может быть использован для уточнения, если задача продолжения работает всегда или только в том случае, если некоторые условия, такие как ошибка или отмена.
Пример главы 5 A-Dash показывает такой альтернативный подход к событиям. Вы можете скачать код из http://parallelpatterns.codeplex.com/. Отказ Посмотрите на классы Andalueengine и MainWindowviewModel.
Вы просто не можете побить асинхронную модель программирования (APM), когда речь идет о производительности ввода / вывода. В любое время вы можете использовать его, вы должны быть. К счастью, задача параллельная библиотека (TPL) поставляется с запеченным в поддержку для объединения работы APM в смеси с «чистыми» задачами TPL через Фразинский заводский метод.
Проверьте этот раздел .NET SDK на MSDN под названием TPL и традиционные .NET асинхронное программирование Для получения дополнительной информации о том, как объединить эти две модели программирования для достижения Async Nirvana.