/// <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;
 }