Я использую Tasks и BlockingCollections, и они отлично справляются со своей задачей.Но, как я понимаю, метод Take () удаляет объект в очереди.Но что, если вы хотите, чтобы 2 задачи имели доступ к одному значению одновременно?
Допустим, я читаю файл и отправляю каждую строку с помощью blockingCollection.Add () на 2 задачи, но я хочу, чтобы обе задачи получали одинаковые строки и в одинаковом порядке.(каждая задача будет делать что-то свое с одной и той же строкой)
Как мне это сделать?Может ли BlockingCollection сделать это?Или я использую события для передачи значений?Если это так, пожалуйста, объясните, как вы могли бы запустить событие задачи / потока в другой задаче / потоке.
[ПРАВИТЬ] Что делать, если я сделаю это:
while (!lineCollection.IsCompleted)
{
Line line = lineCollection.Take();
//do my processing
//then I add the original line back to the collection
lineCollection.Add(line);
//and use a "wait one" to wait for T2 to Take this line aswell
//Then continue my while loop
}
не очень элегантно... Это также не гарантирует синхронизацию.