想知道如何在下面代替AutoResetEvent?我試圖考慮如何使用RX方式或使用任務,但我可以看到如何去做。IObservable - 替換AutoResetEvent
public void LogOnResponse LogOn()
{
LogOnResponse logOnResponse = null;
var waitEvent = new AutoResetEvent(false);
var listener = _connection.LoginStatusEvent
.Where(x => x.LoginState == LoginState.LoggedOn
|| x.LoginState == LoginState.LoggedRejected);
listener.Subscribe(x => {
logOnResponse = new LogOnResponse();
logOnResponse.InformationMessage = x.Message;
logOnResponse.IsAuthenticated = x.LoginState == LoginState.LoggedOn;
waitEvent.Set();
});
connection.Login(connectionInfo);
waitEvent.WaitOne(2000);
return logOnResponse;
}
登錄後需要登錄「First()」嗎?它只是最初的IObservable只會在登錄後纔開始發佈結果......如果我能正確理解代碼,它會阻塞,直到它收到一些東西,但永遠不會因爲它沒有登錄。 – 2011-03-02 20:27:16
此外,如果這是這種情況如果連接完成並在First()方法連接之前通過通知發佈通知,會發生什麼? – 2011-03-02 20:28:12
好點 - 調整了代碼 – 2011-03-02 21:25:28