Эквивалент C # для Java ExecutorService.newSingleThreadExecutor () или: как сериализовать многопоточный доступ к ресурсу

В моем коде есть несколько ситуаций, когда различные потоки могут создавать рабочие элементы, которые по разным причинам не должны выполняться параллельно. Я хотел бы убедиться, что работа выполняется в режиме FIFO, независимо от того, из какого потока она поступает. В Java я бы поместил рабочие элементы в однопоточную ExecutorService ; есть ли эквивалент в C #? Я собрал кое-что вместе с Queue и кучей блоков lock () {} , но было бы неплохо иметь возможность использовать что-то готовое и протестировано.

Обновление: Есть ли у кого-нибудь опыт работы с System.Threading.Tasks? Есть ли у него решение для подобных вещей? Я пишу приложение Monotouch, так что кто знает, смогу ли я найти его версию с задним переносом, которую я мог бы заставить работать, но это ' d, по крайней мере, есть о чем подумать на будущее.

Обновление №2 Для разработчиков C #, незнакомых с библиотеками Java, о которых я говорю, в основном мне нужно что-то, что позволяет различным потокам передавать рабочие элементы таким образом, чтобы все эти рабочие элементы будут выполняться в одном потоке (который не является ни одним из вызывающих потоков).


Обновление, 6/2018 : Если бы я проектировал аналогичную систему сейчас, я бы, вероятно, использовал Реактивные расширения согласно Ответ Мэтта Крейга . Я оставляю ответ Захари Йейтса принятым, потому что, если вы думаете в Rx, вы, вероятно, даже не зададите этот вопрос, и я думаю, что ConcurrentQueue проще втиснуться в программу pre-Rx.

18
задан David Moles 17 June 2018 в 16:49
поделиться