我正試圖找到處理CCR調度程序,DispatcherQueue和Interleave彼此相互關聯的最佳方法。我有一個叫「MyClass」的類,它有一個調度程序和一個調度程序隊列。該類公開了客戶端可以發佈消息的單個PortSet。在「MyClass」中,我爲這些消息創建了持久接收者並連接到調度程序隊列。我還添加了所有接收器作爲單個交錯的一部分。現在,當客戶端認爲使用「MyClass」類完成時,我希望客戶端安全地銷燬該類。有三件事需要在這裏銷燬,即調度器,調度器隊列和交錯器。什麼是最好的方式來做到這一點?我碰巧在鏈接http://channel9.msdn.com/shows/Going+Deep/CCR-Programming-Jeffrey-Richter-and-George-Chrysanthakopoulos/上閱讀討論。雖然沒有明確提到,但我推斷出Dispose的正確方法是我需要首先將拆卸消息發佈到交織器,等待交織器拆卸然後處置調度器隊列。現在,我的類的配置代碼如下所示。如何安全地處理CCR調度程序,調度程序隊列和交錯
var teardownInterleave = new TeardownInterleave();
InternalMessagesPort.PostUnknownType(teardownInterleave);
var done = new ManualResetEvent(false);
Activate(Arbiter.Receive(false, teardownInterleave.CompletionPort,
emptyValue => done.Set()));
done.WaitOne();
Thread.Sleep(100);
// Dispose the TaskQ
TaskQueue.Dispose();
/// <summary>
/// Message posted to any interleave asking it to teardown.
/// </summary>
public sealed class TeardownInterleave
{
/// <summary>
/// Gets the completion port.
/// </summary>
/// <value>
/// The completion port.
/// </value>
public Port<EmptyValue> CompletionPort { get; private set; }
/// <summary>
/// Initializes a new instance of the <see cref="TeardownInterleave" /> class.
/// </summary>
public TeardownInterleave()
{
CompletionPort = new Port<EmptyValue>();
}
}
請澄清,如果這是正確的做法還是我失去了一些東西。
感謝,
Venkat