diff --git a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
index 8b8908b6e6..07446d45fc 100644
--- a/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
+++ b/src/System.Management.Automation/engine/remoting/client/RemotingProtocol2.cs
@@ -813,7 +813,7 @@ namespace System.Management.Automation.Internal
// what thread this callback is made from. If it was made from a transport
// callback event then a deadlock may occur when DisconnectAsync is called on
// that same thread.
- ThreadPool.QueueUserWorkItem(new WaitCallback(StartDisconnectAsync), RemoteSession);
+ ThreadPool.QueueUserWorkItem(new WaitCallback(StartDisconnectAsync));
}
}
}
@@ -821,10 +821,18 @@ namespace System.Management.Automation.Internal
///
/// WaitCallback method to start an asynchronous disconnect.
///
- ///
- private void StartDisconnectAsync(object remoteSession)
+ ///
+ private void StartDisconnectAsync(object state)
{
- ((ClientRemoteSession)remoteSession).DisconnectAsync();
+ var remoteSession = RemoteSession;
+ try
+ {
+ remoteSession?.DisconnectAsync();
+ }
+ catch
+ {
+ // remoteSession may have already been disposed resulting in unexpected exceptions.
+ }
}
///