C # equivalente para Java ExecutorService.newSingleThreadExecutor (), ou: como serializar o acesso multithread a um recurso

Eu tenho algumas situações no meu código em que vários threads podem criar itens de trabalho que, por vários motivos, não devem ser feitos em paralelo. Eu gostaria de garantir que o trabalho seja realizado de maneira FIFO, independentemente de qual segmento ele vem. Em Java, eu colocava os itens de trabalho em um thread únicoExecutorService; existe um equivalente em c #? Eu cobbled algo junto com umQueue e um monte delock(){} blocos, mas seria bom poder usar algo disponível e testado.

Atualizar: Alguém tem experiência com System.Threading.Tasks? Ele tem uma solução para esse tipo de coisa? Estou escrevendo um aplicativo Monotouch para que quem sabe se eu pudesse encontrar uma versão backportada para poder trabalhar, mas pelo menos seria algo para se pensar no futuro.

Atualização # 2 Para desenvolvedores de C # não familiarizados com as bibliotecas Java de que estou falando, basicamente quero algo que permita que vários threads entreguem itens de trabalho, de modo que todos esses itens de trabalho sejam executados em um único thread (que não é um dos threads de chamada) .

Atualização, 6/2018: Se eu estivesse arquitetando um sistema semelhante agora, provavelmente usariaExtensões Reativas conformeResposta de Matt Craig. Estou indo emboraResposta de Zachary Yates o aceito, no entanto, porque se você está pensando em Rx, provavelmente nem faria essa pergunta, e achoConcurrentQueue é mais fácil entrar em um programa pré-Rx.

questionAnswers(5)

yourAnswerToTheQuestion