public async Task <bool> Connect() { bool connected = false; bool failedToConnect = false; _clientRpc.OnConnected += () => connected = true; _clientRpc.OnFailedToConnect += (ex) => failedToConnect = true; _clientRpc.OnDisconnected += () => connected = false; _clientRpc.Connect("localhost", 13); var timeout = new CancellationTokenSource(); timeout.CancelAfter(_connectTimeout); await Task.Run(() => { while (!connected && !failedToConnect) { Task.Delay(TimeSpan.FromSeconds(.5f)); } }, timeout.Token); return(connected & !failedToConnect); }