Это мой первый пост с вопросом по "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
Мобильная версия