Что бы быть лучшим подходом для реализации задач с помощью ключа, который работает следующим образом: -Реализация «только один из» и «не в параллельной» семантике с параллельной библиотекой задач
Вариант 1) Только один из этих ключ никогда не ожидается. Может использоваться, например, из ASP.NET MVC, чтобы помещать в очередь один рендер для миниатюрного изображения независимо от того, сколько раз поражает URL-адрес изображения. Только один запускается, все остальные запросы ждут завершения этого.
Вариант 2) Все элементы с одним и тем же ключом должны выполняться последовательно. Можно использовать, например, чтобы гарантировать, что операции, которые извлекают файл из хранилища резервных копий в локальный кеш, не все пытаются одновременно загрузить файл в кеш. Вариант 1 является частным случаем, когда последующие действия с одним и тем же ключом просто отбрасываются (как правило, сохраняется только проверка файла).
У меня есть существующий WorkQueue, который обрабатывает оба этих случая (а также состояние квартиры, параметры ThreadPriority и максимальные степени параллелизма). TPL, по-видимому, является лучшим решением для замены этого и приведет к улучшенным вариантам отмены.
Вложенные задачи с продолжением выглядят обнадеживающими, но сохранение словаря текущих задач queue'd вскоре становится беспорядочным между классами TaskFactory и TaskScheduler. Наследование из задачи также проблематично, поскольку ни TaskFactory, ни TaskScheduler не являются обобщенными в Task.
Большинство задач Параллельные примеры предполагают, что набор задач известен заранее. В этом случае новые задачи все время добавляются и должны быть либо отброшены, либо привязаны к существующим задачам в зависимости от запрошенной операции и ключа, переданного.
Кто-нибудь реализовал что-либо подобное этому с помощью TPL, и если да, то вы взяли в своих классах Task, TaskScheduler и TaskFactory?
Неверный вопрос, oops –