我有以下異步隊列處理路由。無功擴展等待隊列空
var commandQueue = new BlockingCollection<MyCommand>();
commandQueue
.GetConsumingEnumerable()
.ToObservable(new LimitedConcurrencyLevelTaskPoolScheduler(5))
.Subscribe(c =>
{
try
{
ProcessCommand(c);
}
catch (Exception ex)
{
Trace.TraceError(ex.ToString());
}
}
);
在一個特定的情況下(當我即將得到一些數據),我需要確保我commandQueue是前走出去,讓數據爲空。預計此操作將同步發生。基本上,我想這樣做
public void GetData()
{
commandQueue.WaitForEmpty();
// could potentially be expressed:
// while (commandQueue.Count > 0) Thread.Sleep(10);
return GoGetTheData()
}
我意識到,在理想情況下,所有的來電者「的GetData」異步......但有時它的必要,它發生在一個同步的方式...等我需要等待命令隊列爲空以確保數據的一致性和最新性。
我知道我如何使用ManualResetEvent輕鬆完成此操作...但我想知道System.Reactive/TPL是否有簡單的方法。
謝謝。
問題是,沒有這樣的方法WaitForEmpty – Jeff
@ JeffN825 - 什麼是BlockCollection呢?這是你定義的東西嗎? – Enigmativity
對不起,我不確定在我的例子中如何被截斷。它是BlockingCollection http://msdn.microsoft.com/en-us/library/dd267312.aspx – Jeff