【发布时间】:2014-12-02 11:11:52
【问题描述】:
我试图通过此处的示例代码来简化我的问题。我有一个生产者线程不断地输入数据,我试图在批处理之间有时间延迟来批处理它,以便 UI 有时间渲染它。但是结果并不像预期的那样,生产者和消费者似乎在同一个线程上。
我不希望批处理缓冲区在正在生成的线程上休眠。试过SubscribeOn 并没有太大帮助。我在这里做错了什么,如何让它在生产者和消费者线程上打印不同的线程 ID。
static void Main(string[] args)
{
var stream = new ReplaySubject<int>();
Task.Factory.StartNew(() =>
{
int seed = 1;
while (true)
{
Console.WriteLine("Thread {0} Producing {1}",
Thread.CurrentThread.ManagedThreadId, seed);
stream.OnNext(seed);
seed++;
Thread.Sleep(TimeSpan.FromMilliseconds(500));
}
});
stream.Buffer(5).Do(x =>
{
Console.WriteLine("Thread {0} sleeping to create time gap between batches",
Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(TimeSpan.FromSeconds(2));
})
.SubscribeOn(NewThreadScheduler.Default).Subscribe(items =>
{
foreach (var item in items)
{
Console.WriteLine("Thread {0} Consuming {1}",
Thread.CurrentThread.ManagedThreadId, item);
}
});
Console.Read();
}
【问题讨论】:
标签: c# .net-4.0 system.reactive