【发布时间】:2014-09-18 16:58:53
【问题描述】:
我有一个静态集合,比如调用远程休息 api 的任务:
static ConcurrentBag<Task<HttpResponseMessage>> _collection = new ConcurrentBag<Task<HttpResponseMessage>>();
static void Main(string[] args)
{
Task.Factory.StartNew(() => Produce());
Task.Factory.StartNew(() => Consume());
Console.ReadKey();
}
一个线程向其中添加新项目:
private static void Produce()
{
while (true)
{
var task = HttpClientFactory.Create().GetAsync("http://example.com");
_collection.Add(task);
Thread.Sleep(500);
}
}
另一个线程应该处理这些项目:
private static void Consume()
{
_collection.ToObservable()
.Subscribe(
t => Console.WriteLine("++"),
ex => Console.WriteLine(ex.Message),
() => Console.WriteLine("Done"));
}
但它只运行一次并且过早完成。所以输出是;
++
完成
【问题讨论】:
-
您还期待什么?
-
@MarcinJuraszek:长话短说,我希望它能够工作。
标签: c# task-parallel-library system.reactive