處理相關事件的最佳方法是什麼?
有一個對象,我需要測試連接是成功還是失敗。 但是,對象首先需要通過初始化步驟,我測試成功或失敗,然後繼續連接步驟。如何觀察無功擴展(Rx)中的相關事件?
- 如果初始化失敗,則返回連接失敗。
- 如果初始化成功,則返回是連接步驟的結果。
我的代碼如下。有沒有更好的方法來處理這些依賴事件,因爲我正在初始化訂閱內部訂閱連接?
如果我有更多這樣的依賴事件,我會繼續嵌套訂閱嗎?
public static void Test()
{
const int maxValue = 501;
var random = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
var initOk = Observable.Interval(TimeSpan.FromMilliseconds(random.Next(maxValue))).Select(i => true);
var initKo = Observable.Interval(TimeSpan.FromMilliseconds(random.Next(maxValue))).Select(i => false);
var connectOk = Observable.Interval(TimeSpan.FromMilliseconds(random.Next(maxValue))).Select(i => true);
var connectKo = Observable.Interval(TimeSpan.FromMilliseconds(random.Next(maxValue))).Select(i => false);
var initResult = initOk.Amb(initKo).Take(1);
var connectResult = connectOk.Amb(connectKo).Take(1);
var id =
initResult.Subscribe(ir =>
{
if (ir)
{
var cd =
connectResult.Subscribe(cr =>
{
Console.WriteLine(cr
? "Connection succeeded."
: "Connection failed.");
});
}
else
{
Console.WriteLine("Initialization failed thus connection failed.");
}
});
}
謝謝。我明白了。 – 2011-04-08 10:25:41