Практические различия между использованием TPL и асинхронизации

StackOverflow https://stackoverflow.com/questions/3046061

Вопрос

Я ищу использовать любой из упомянутых способов борьбы с длинными эксплуатациями.

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

У меня есть набор методов, связанных с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top