想知道如何在下面代替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