public static Task DisconnectTaskAsync(this BandClientManager manager, BandClient client) { // short circuit becuase if we are already disconnected // then the delegate won't get fired if (!client.IsConnected) { return(Task.FromResult <object> (null)); } var tcs = new TaskCompletionSource <object> (); EventHandler <ClientManagerDisconnectedEventArgs> onDisconnect = null; EventHandler <ClientManagerFailedToConnectEventArgs> onFailed = null; // setup the disconnected event onDisconnect = (sender, args) => { if (args.Client == client) { manager.Disconnected -= onDisconnect; manager.ConnectionFailed -= onFailed; // we were disconnected (success) tcs.SetResult(null); } }; manager.Disconnected += onDisconnect; // setup the failed event onFailed = (sender, args) => { if (args.Client == client) { manager.Disconnected -= onDisconnect; manager.ConnectionFailed -= onFailed; // we failed tcs.SetException(new BandException(args.Error)); } }; manager.ConnectionFailed += onFailed; // run async manager.DisconnectAsync(client); return(tcs.Task); }
public static Task DisconnectTaskAsync(this BandClientManager manager, BandClient client) { var tcs = new TaskCompletionSource <object> (); EventHandler <ClientManagerDisconnectedEventArgs> onDisconnect = null; EventHandler <ClientManagerFailedToConnectEventArgs> onFailed = null; // setup the disconnected event onDisconnect = (sender, args) => { if (args.Client == client) { manager.Disconnected -= onDisconnect; manager.ConnectionFailed -= onFailed; // we were disconnected (success) tcs.SetResult(null); } }; manager.Disconnected += onDisconnect; // setup the failed event onFailed = (sender, args) => { if (args.Client == client) { manager.Disconnected -= onDisconnect; manager.ConnectionFailed -= onFailed; // we failed tcs.SetException(new BandException(args.Error)); } }; manager.ConnectionFailed += onFailed; // run async manager.DisconnectAsync(client); return(tcs.Task); }