Неясно, чего вы пытаетесь достичь здесь, где и как действия входят в эту цепочку и как вам нужно с ними справляться.
Что касается отслеживания того, что в данный момент происходит, все, что вам нужно, - это правильный параллелизм. Есть несколько объектов, встроенных в .NET 4.0, которые вы можете использовать или создавать свои собственные. Поскольку эти данные являются динамическими, их, вероятно, не следует сохранять, если только вы не ожидаете, что ваш процесс сможет точно определить, где он остановился после завершения. Таким образом, вы можете, например, использовать ConcurrentDictionary<string, string[,]>
, в котором будут храниться двумерные массивы, снабженные строкой идентификатора, которая должна быть уникальной в Словаре (даже если массивы двух идентификаторов имеют одинаковые размеры и значения). Проверка на параллелизм является встроенной, что означает, что вы можете иметь несколько потоков, выполняющих несколько действий над этим Словарём, не беспокоясь о «условиях гонки», когда два потока могут пытаться читать или записывать одно и то же одновременно.
Имейте в виду, что данные в памяти как часть вашего процесса по какой-либо причине прекратят свое существование по окончании процесса. Если вы не хотите, чтобы это произошло, у вас может быть поток, задачей которого является сохранение содержимого ConcurrentDictionary в файл или базу данных. Поскольку это один поток, считывающий потокобезопасную коллекцию данных, проблемы параллелизма в записи файлов в значительной степени избегаются. КАК ДОЛГО КАК одна запись в ConcurrentDictionary не зависит от данных в другой (вы все равно можете иметь дело со случаями, когда одна запись запись зависит от другого, но она становится более сложной). Этот поток может быть «запущен» во время выполнения других действий, или на основе таймера, или чего бы вы ни выбрали для удовлетворения ваших потребностей.