Использование thread.join, чтобы убедиться, что все потоки в коллекции выполняются перед тем, как продолжить - PullRequest
0 голосов
/ 13 февраля 2009

Есть ли проблема с этим типом реализации, чтобы дождаться завершения пакета потоков, прежде чем двигаться дальше, при следующих обстоятельствах?:

  • CCR или PFX не могут быть использованы.
  • Коллекция Customer.Prices и newCustomer НЕ изменяются.
  • CloneCustomerPrices выполняет глубокое копирование каждой цены в коллекции Customer.Prices в новую коллекцию цен.
public List[Customer] ProcessCustomersPrices(List [Customer] Customers)
{
[Code to check Customers and  deep copy Cust data into newCustomers]
List[Thread] ThreadList = new List[Thread]();
foreach(Customer cust in Customers)
{
ThreadList.Add(new Thread(() => CloneCustomerPrices(cust.Prices, newCustomer)));
}

Action runThreadBatch = () =>
            {
                 ThreadList.ForEach(t => t.Start());
                 ThreadList.All    (t => t.Join([TimeOutNumber]));
            };

runThreadBatch(CopyPriceModelsCallback, null);

[More Processing]
return newCustomers;
}

Ответы [ 2 ]

1 голос
/ 09 августа 2009

Ожидание реализации выглядит нормально, просто убедитесь, что CloneCustomerPrices является поточно-ориентированным.

1 голос
/ 13 февраля 2009

Имеет смысл для меня, пока потоки заканчиваются к таймауту. Не уверен, что новый клиент (так же, как каст?). Если это так, я также не знаю, как планировать вернуть только один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...