/// <summary> /// 让这个设备做一件事,尝试直到连接成功,或者超时 /// 这个事情到底应该是在Conversation里面做,还是在Device里面做?在Conversation里面做才有意义。Device不知道 /// 当连接的时候,这个事情还可不可以做。 /// /// 每个Conversation都可以有一个PendableAction,所以如果放在Device里面,Device来限制Conversation /// 只有一个PendableAction,那就不合适了。 /// /// 只有请求端才需要这种行为 /// </summary> /// <param name="action"></param> /// <param name="timeout"></param> /// <param name="timeoutAction"></param> /// <returns>如果连接并执行了,返回true,否则返回false</returns> protected void PostPendableAction(Action action, double timeout, Action timeoutAction) { if (!Peer.Post((device) => action?.Invoke())) { PendingAction = new PendableAction(Peer, action, timeout, timeoutAction); } }
internal override void End() { base.End(); Peer.Connected -= Device_Connected; Peer.Errored -= Device_Errored; State = RequesterState.Finished; if (IsAutoRecoverable) { Peer.RemoveAutoConnectRequester(this); } PendingAction?.Cancel(); PendingAction = null; }