Запуск Producer-Tasks из вызываемого метода?

Я новичок в задачах и должен решить проблему здесь. Я постоянно получаю int и float (примерно каждые 10 мс), которые изначально фильтруются из постоянного потока данных, а затем обрабатываются разными алгоритмами. Я хочу сложить их в BlockingCollection, чтобы иметь шаблон ConsumerProducer для дальнейшей обработки этих данных. Я хочу запустить несколько производителей и потребителей, но я застрял здесь, так как не знаю, как обращаться с этим постоянным потоком данных. Мой подход такой:

public void Store(int iChannel, float fValue)
{
    producer = new Task(() => { BundleAndPutOnMyBlockingCollection(iChannel, fValue);
}

... очевидно, что это дает мне множество задач, так как Store() постоянно вызывается. Я попытался выполнить обработку с помощью mytask.status, но потерпел неудачу. Может ли кто-нибудь дать мне подсказку, как справиться с этой проблемой? Лучше всего иметь масштабируемое количество задач для производства, например. 100 для тестирования. Спасибо.


person Rome    schedule 14.02.2012    source источник


Ответы (1)


Ну, вы никогда не запускаете задачи, так что таким образом ничего никогда не окажется в блокирующей коллекции... но мне не очень понятно, зачем вам вообще нужна задача здесь. Почему ваш метод Store просто не добавляет его напрямую в коллекцию блокировки? Вы вполне можете хотеть задачу для потребителя, но это другое дело.

person Jon Skeet    schedule 14.02.2012
comment
Извините, я забыл написать .Start() в строке выше, это, должно быть, пришло из другой попытки, когда я выполнял задачу где-то еще. Итак, я собираюсь использовать только одного продюсера — я почему-то подумал, что этого будет недостаточно, чтобы справиться с быстрым вводом. Спасибо, я попробую это. - person Rome; 14.02.2012
comment
@Rome: Почему этого недостаточно для быстрого ввода? Вы только добавляете в коллекцию — вы не ждете, пока вся коллекция будет обработана. Если вы беспокоитесь, что в конечном итоге вы можете заполнить свою блокирующую коллекцию (при условии, что она ограничена), то запуск задачи на самом деле вам не поможет — если вы производите данные быстрее, чем можете их использовать, вы собираетесь либо отступить, либо потерять данные. Это решение, с которым мы не можем вам помочь. - person Jon Skeet; 14.02.2012