public override bool Connect() { var clientReady = new SemaphoreSlim(0); var socketReady = new SemaphoreSlim(0); socketClient = new SlackSocketClient(Configuration.Password); socketClient.Connect(connected => { clientReady.Release(); }, () => { socketReady.Release(); }); socketClient.OnMessageReceived += MessageReceivedCallback; if (!Task.WaitAll(new[] { clientReady.WaitAsync(), socketReady.WaitAsync() }, TimeSpan.FromSeconds(10))) { return(false); } Channels = socketClient.Channels.Select(ToChatChannel) .Concat(socketClient.Groups.Select(ToChatChannel)) .Concat(socketClient.DirectMessages.Select(ToChatChannel)) .ToList(); activityTimer = new Timer(state => socketClient.SendPresence(Presence.active), null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); return(true); }