Task и стабильность работы

168
08 апреля 2018, 23:19

Для многопоточной обработки без ожидания использую

private void QQ(string str) {
    var outer = Task.Factory.StartNew(() => {
        ...
    });
}

При этом метод QQ может вызываться больше 10 раз в секунду.

Если я правильно понял, то Task каждый раз создаёт новый поток.

Будут ли какие-либо проблемы, если создавать по 20 потоков в секунду, и, если да, то как можно отвести для этого метода только 2-3 потока?

Знаю, что можно создать лист, в который добавлять параметры для метода (в данном случае string str), создать 2 потока, которые берут инфу из листа, блокировать их, и разблокировать при добавлении новой инфы в лист, но это попахивает костылём.

Answer 1

Если вам не требуется какая-то экзотическая работа с потоками, то проще использовать Task.Run(() => {}); По-умолчанию при работе с тасками новый поток не создается, а берется существующий из пула.

Таски как раз придуманы для того, чтобы не писать костыли с передачей параметров между потоками. По поводу проблем, тут нужно смотреть что у вас в () => {}. Но попробуйте без преждевременной оптимизации и сделайте сначала по-простому.

READ ALSO
Как выбрать элемент из IEnumerable?

Как выбрать элемент из IEnumerable?

В модели Book есть уникальный IdКак выбрать элемент из IEnumerable по Id=1?

211
Как лучше организовать обмен данными UDP?

Как лучше организовать обмен данными UDP?

Разрабатываю клиент-серверное приложение, где клиенты обмениваются данными в реальном времениНемного разобравшись в теме, выбрал наиболее...

209
c# Наложение одной формы на другую. Picturebox

c# Наложение одной формы на другую. Picturebox

Добрый деньНаписал программу, которая делает скрин выделенной части экрана

207
Передача цвета из одной формы в другую

Передача цвета из одной формы в другую

Доброго времени суток!Такая проблема: Создалa Form1(там должен меняться цвет), создалa Form2, кинулa туда кнопку, комбо бокс, что-то вроде выпадающего...

170