Параллельное управление задачами в .NETC#

Место общения программистов C#
Ответить
Anonymous
 Параллельное управление задачами в .NET

Сообщение Anonymous »

Необходимо управлять ожиданием запуска Заданий, используя коллекцию для этих задач. При этом мне бы не хотелось создавать ситуацию с "бесконечно" растущими коллекциями, где большая часть задач уже выполнена!
Это мой первый пост с вопросом по "stackoverflow" - прошу прощения, если что-то не так ;-)

Код: Выделить всё

// TaksBag  some “global” variable for Task concurrent collection as “ConcurrentDictionary()”  - I don’t know another standard solution for this
//some cycling code begin

Task tsk = null;
tsk = new Task(() => { var t = tsk; TasksBag.TryAdd(t, 0); SomeProcess(); TasksBag.TryRemove(t, out _); }); //Many “times” (points) in code
tsk.Start();

//Perhaps this realization is better begin
Task tsk = new Task(() => SomeProcess ());
TasksBag.TryAdd(tsk, 0);
tsk = tsk.ContinueWith((t) => TasksBag.TryRemove(t, out _));
tsk.Start();
//Perhaps this realization is better begin

//some cycling code end

//Accomplished point
var ta = TasksBag.Keys.ToArray();
Task.WaitAll(ta);
//TasksBag.TryRemove() //not needed
Существует ли какой-либо установленный код шаблона для следующей конструкции (для простоты я опускаю шаблон отмены и обработку исключений).
Их может быть два архитектурные ситуации в точке Accomplished части кода
  • гарантировано - новые задачи в коллекцию не добавляются
  • Приемлемо – новые задачи могут продолжать добавляться в коллекцию, но следует ожидать и исключать из коллекции только то, что было в этой коллекции на момент входа в эту точку. И, возможно, позже на этом этапе еще будет новый хит
Есть ли какое-то общепринятое решение такой проблемы проблема? Или упрощенный код?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ent-in-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»