| @@ -110,7 +110,7 @@ namespace Discord.Commands | |||||
| { | { | ||||
| var task = cmd.Handler(eventArgs); | var task = cmd.Handler(eventArgs); | ||||
| if (task != null) | if (task != null) | ||||
| await task; | |||||
| await task.ConfigureAwait(false); | |||||
| } | } | ||||
| catch (Exception ex) | catch (Exception ex) | ||||
| { | { | ||||
| @@ -123,7 +123,7 @@ namespace Discord | |||||
| if (channel == null) throw new ArgumentNullException(nameof(channel)); | if (channel == null) throw new ArgumentNullException(nameof(channel)); | ||||
| CheckReady(); | CheckReady(); | ||||
| await _api.EditChannel(channel.Id, name: name, topic: topic); | |||||
| await _api.EditChannel(channel.Id, name: name, topic: topic).ConfigureAwait(false); | |||||
| if (position != null) | if (position != null) | ||||
| { | { | ||||
| @@ -147,7 +147,7 @@ namespace Discord | |||||
| channels[newPos] = channel; | channels[newPos] = channel; | ||||
| } | } | ||||
| Channel after = minPos > 0 ? channels.Skip(minPos - 1).FirstOrDefault() : null; | Channel after = minPos > 0 ? channels.Skip(minPos - 1).FirstOrDefault() : null; | ||||
| await ReorderChannels(channel.Server, channels.Skip(minPos), after); | |||||
| await ReorderChannels(channel.Server, channels.Skip(minPos), after).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| @@ -187,7 +187,7 @@ namespace Discord | |||||
| CheckReady(); | CheckReady(); | ||||
| foreach (var message in messages) | foreach (var message in messages) | ||||
| await DeleteMessageInternal(message); | |||||
| await DeleteMessageInternal(message).ConfigureAwait(false); | |||||
| } | } | ||||
| private async Task DeleteMessageInternal(Message message) | private async Task DeleteMessageInternal(Message message) | ||||
| { | { | ||||
| @@ -48,7 +48,7 @@ namespace Discord | |||||
| var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).FirstOrDefault(); | var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).FirstOrDefault(); | ||||
| if (allowValue != 0 || denyValue != 0) | if (allowValue != 0 || denyValue != 0) | ||||
| { | { | ||||
| await _api.SetChannelPermissions(channel.Id, targetId, targetType.Value, allowValue, denyValue); | |||||
| await _api.SetChannelPermissions(channel.Id, targetId, targetType.Value, allowValue, denyValue).ConfigureAwait(false); | |||||
| if (perms != null) | if (perms != null) | ||||
| { | { | ||||
| perms.Allow.SetRawValueInternal(allowValue); | perms.Allow.SetRawValueInternal(allowValue); | ||||
| @@ -68,7 +68,7 @@ namespace Discord | |||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| await _api.DeleteChannelPermissions(channel.Id, targetId); | |||||
| await _api.DeleteChannelPermissions(channel.Id, targetId).ConfigureAwait(false); | |||||
| if (perms != null) | if (perms != null) | ||||
| { | { | ||||
| channel.PermissionOverwrites = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).ToArray(); | channel.PermissionOverwrites = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).ToArray(); | ||||
| @@ -86,7 +86,7 @@ namespace Discord | |||||
| var role = _roles.GetOrAdd(response.Id, server.Id); | var role = _roles.GetOrAdd(response.Id, server.Id); | ||||
| role.Update(response); | role.Update(response); | ||||
| await EditRole(role, name: name); | |||||
| await EditRole(role, name: name).ConfigureAwait(false); | |||||
| return role; | return role; | ||||
| } | } | ||||
| @@ -101,7 +101,7 @@ namespace Discord | |||||
| name: name ?? role.Name, | name: name ?? role.Name, | ||||
| permissions: permissions?.RawValue ?? role.Permissions.RawValue, | permissions: permissions?.RawValue ?? role.Permissions.RawValue, | ||||
| color: color?.RawValue, | color: color?.RawValue, | ||||
| hoist: hoist); | |||||
| hoist: hoist).ConfigureAwait(false); | |||||
| if (position != null) | if (position != null) | ||||
| { | { | ||||
| @@ -124,7 +124,7 @@ namespace Discord | |||||
| roles[i] = roles[i - 1]; | roles[i] = roles[i - 1]; | ||||
| roles[newPos] = role; | roles[newPos] = role; | ||||
| } | } | ||||
| await _api.ReorderRoles(role.Server.Id, roles.Skip(minPos).Select(x => x.Id), minPos); | |||||
| await _api.ReorderRoles(role.Server.Id, roles.Skip(minPos).Select(x => x.Id), minPos).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| @@ -99,7 +99,7 @@ namespace Discord | |||||
| if (server == null) throw new ArgumentNullException(nameof(server)); | if (server == null) throw new ArgumentNullException(nameof(server)); | ||||
| CheckReady(); | CheckReady(); | ||||
| var response = await _api.EditServer(server.Id, name: name ?? server.Name, region: region.Value, iconType: iconType, icon: icon); | |||||
| var response = await _api.EditServer(server.Id, name: name ?? server.Name, region: region.Value, iconType: iconType, icon: icon).ConfigureAwait(false); | |||||
| server.Update(response); | server.Update(response); | ||||
| } | } | ||||
| @@ -52,7 +52,7 @@ namespace Discord | |||||
| this.Connected += async (s, e) => | this.Connected += async (s, e) => | ||||
| { | { | ||||
| _api.CancelToken = CancelToken; | _api.CancelToken = CancelToken; | ||||
| await SendStatus(); | |||||
| await SendStatus().ConfigureAwait(false); | |||||
| }; | }; | ||||
| VoiceDisconnected += (s, e) => | VoiceDisconnected += (s, e) => | ||||
| @@ -212,7 +212,7 @@ namespace Discord | |||||
| } | } | ||||
| catch (TaskCanceledException) { throw new TimeoutException(); } | catch (TaskCanceledException) { throw new TimeoutException(); } | ||||
| await Connect(token); | |||||
| await Connect(token).ConfigureAwait(false); | |||||
| return token; | return token; | ||||
| } | } | ||||
| @@ -227,8 +227,9 @@ namespace Discord | |||||
| _api.Token = token; | _api.Token = token; | ||||
| string gateway = (await _api.Gateway() | string gateway = (await _api.Gateway() | ||||
| .Timeout(_config.APITimeout) | |||||
| .ConfigureAwait(false)).Url; | |||||
| .Timeout(_config.APITimeout) | |||||
| .ConfigureAwait(false) | |||||
| ).Url; | |||||
| if (_config.LogLevel >= LogMessageSeverity.Verbose) | if (_config.LogLevel >= LogMessageSeverity.Verbose) | ||||
| RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Websocket endpoint: {gateway}"); | RaiseOnLog(LogMessageSeverity.Verbose, LogMessageSource.Client, $"Websocket endpoint: {gateway}"); | ||||
| @@ -259,7 +260,7 @@ namespace Discord | |||||
| while (_pendingMessages.TryDequeue(out ignored)) { } | while (_pendingMessages.TryDequeue(out ignored)) { } | ||||
| } | } | ||||
| await _api.Logout(); | |||||
| await _api.Logout().ConfigureAwait(false); | |||||
| _channels.Clear(); | _channels.Clear(); | ||||
| _users.Clear(); | _users.Clear(); | ||||
| @@ -501,7 +502,7 @@ namespace Discord | |||||
| RaiseMessageCreated(msg); | RaiseMessageCreated(msg); | ||||
| if (Config.AckMessages && !isAuthor) | if (Config.AckMessages && !isAuthor) | ||||
| await _api.AckMessage(data.Id, data.ChannelId); | |||||
| await _api.AckMessage(data.Id, data.ChannelId).ConfigureAwait(false); | |||||
| } | } | ||||
| break; | break; | ||||
| case "MESSAGE_UPDATE": | case "MESSAGE_UPDATE": | ||||
| @@ -612,7 +613,7 @@ namespace Discord | |||||
| //Internal (handled in DiscordSimpleClient) | //Internal (handled in DiscordSimpleClient) | ||||
| case "VOICE_SERVER_UPDATE": | case "VOICE_SERVER_UPDATE": | ||||
| await base.OnReceivedEvent(e); | |||||
| await base.OnReceivedEvent(e).ConfigureAwait(false); | |||||
| break; | break; | ||||
| //Others | //Others | ||||
| @@ -77,7 +77,7 @@ namespace Discord | |||||
| { | { | ||||
| RaiseDisconnected(e); | RaiseDisconnected(e); | ||||
| if (e.WasUnexpected) | if (e.WasUnexpected) | ||||
| await socket.Reconnect(_token); | |||||
| await socket.Reconnect(_token).ConfigureAwait(false); | |||||
| }; | }; | ||||
| if (!_config.VoiceOnly) | if (!_config.VoiceOnly) | ||||
| @@ -90,7 +90,7 @@ namespace Discord | |||||
| } | } | ||||
| } | } | ||||
| socket.ReceivedEvent += async (s, e) => await OnReceivedEvent(e); | |||||
| socket.ReceivedEvent += async (s, e) => await OnReceivedEvent(e).ConfigureAwait(false); | |||||
| return socket; | return socket; | ||||
| } | } | ||||
| internal virtual VoiceWebSocket CreateVoiceSocket() | internal virtual VoiceWebSocket CreateVoiceSocket() | ||||
| @@ -102,7 +102,7 @@ namespace Discord | |||||
| { | { | ||||
| RaiseVoiceDisconnected(socket.CurrentServerId, e); | RaiseVoiceDisconnected(socket.CurrentServerId, e); | ||||
| if (e.WasUnexpected) | if (e.WasUnexpected) | ||||
| await socket.Reconnect(); | |||||
| await socket.Reconnect().ConfigureAwait(false); | |||||
| }; | }; | ||||
| if (_config.LogLevel >= LogMessageSeverity.Info) | if (_config.LogLevel >= LogMessageSeverity.Info) | ||||
| { | { | ||||
| @@ -212,7 +212,7 @@ namespace Discord | |||||
| catch (Exception ex) { await DisconnectInternal(ex: ex, skipAwait: true).ConfigureAwait(false); } | catch (Exception ex) { await DisconnectInternal(ex: ex, skipAwait: true).ConfigureAwait(false); } | ||||
| //Ensure all other tasks are signaled to end. | //Ensure all other tasks are signaled to end. | ||||
| await DisconnectInternal(skipAwait: true); | |||||
| await DisconnectInternal(skipAwait: true).ConfigureAwait(false); | |||||
| //Wait for the remaining tasks to complete | //Wait for the remaining tasks to complete | ||||
| try { await allTasks.ConfigureAwait(false); } | try { await allTasks.ConfigureAwait(false); } | ||||
| @@ -309,7 +309,7 @@ namespace Discord | |||||
| { | { | ||||
| string token = e.Payload.Value<string>("token"); | string token = e.Payload.Value<string>("token"); | ||||
| _voiceSocket.Host = "wss://" + e.Payload.Value<string>("endpoint").Split(':')[0]; | _voiceSocket.Host = "wss://" + e.Payload.Value<string>("endpoint").Split(':')[0]; | ||||
| await _voiceSocket.Login(_userId, _dataSocket.SessionId, token, CancelToken); | |||||
| await _voiceSocket.Login(_userId, _dataSocket.SessionId, token, CancelToken).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -70,7 +70,7 @@ namespace Discord.Net.WebSockets | |||||
| protected override async Task ProcessMessage(string json) | protected override async Task ProcessMessage(string json) | ||||
| { | { | ||||
| await base.ProcessMessage(json); | |||||
| await base.ProcessMessage(json).ConfigureAwait(false); | |||||
| var msg = JsonConvert.DeserializeObject<WebSocketMessage>(json); | var msg = JsonConvert.DeserializeObject<WebSocketMessage>(json); | ||||
| if (msg.Sequence.HasValue) | if (msg.Sequence.HasValue) | ||||
| _lastSeq = msg.Sequence.Value; | _lastSeq = msg.Sequence.Value; | ||||
| @@ -104,7 +104,7 @@ namespace Discord.Net.WebSockets | |||||
| Host = payload.Url; | Host = payload.Url; | ||||
| if (_logLevel >= LogMessageSeverity.Info) | if (_logLevel >= LogMessageSeverity.Info) | ||||
| RaiseOnLog(LogMessageSeverity.Info, "Redirected to " + payload.Url); | RaiseOnLog(LogMessageSeverity.Info, "Redirected to " + payload.Url); | ||||
| await Redirect(payload.Url); | |||||
| await Redirect(payload.Url).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -66,7 +66,7 @@ namespace Discord.Net.WebSockets | |||||
| if ((WebSocketState)_state == WebSocketState.Connected) | if ((WebSocketState)_state == WebSocketState.Connected) | ||||
| { | { | ||||
| //Adjust the host and tell the system to reconnect | //Adjust the host and tell the system to reconnect | ||||
| await DisconnectInternal(new Exception("Server transfer occurred."), isUnexpected: false); | |||||
| await DisconnectInternal(new Exception("Server transfer occurred."), isUnexpected: false).ConfigureAwait(false); | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -163,7 +163,7 @@ namespace Discord.Net.WebSockets | |||||
| catch (Exception ex) { await DisconnectInternal(ex: ex, skipAwait: true).ConfigureAwait(false); } | catch (Exception ex) { await DisconnectInternal(ex: ex, skipAwait: true).ConfigureAwait(false); } | ||||
| //Ensure all other tasks are signaled to end. | //Ensure all other tasks are signaled to end. | ||||
| await DisconnectInternal(skipAwait: true); | |||||
| await DisconnectInternal(skipAwait: true).ConfigureAwait(false); | |||||
| //Wait for the remaining tasks to complete | //Wait for the remaining tasks to complete | ||||
| try { await allTasks.ConfigureAwait(false); } | try { await allTasks.ConfigureAwait(false); } | ||||
| @@ -186,7 +186,7 @@ namespace Discord.Net.WebSockets | |||||
| _wasDisconnectUnexpected = false; | _wasDisconnectUnexpected = false; | ||||
| //Dont reset disconnectReason, we may called ThrowError() later | //Dont reset disconnectReason, we may called ThrowError() later | ||||
| await _engine.Disconnect(); | |||||
| await _engine.Disconnect().ConfigureAwait(false); | |||||
| _cancelTokenSource = null; | _cancelTokenSource = null; | ||||
| var oldState = _state; | var oldState = _state; | ||||
| _state = (int)WebSocketState.Disconnected; | _state = (int)WebSocketState.Disconnected; | ||||
| @@ -227,7 +227,7 @@ namespace Discord.Net.WebSockets | |||||
| await Task.Delay(_heartbeatInterval, cancelToken).ConfigureAwait(false); | await Task.Delay(_heartbeatInterval, cancelToken).ConfigureAwait(false); | ||||
| } | } | ||||
| else | else | ||||
| await Task.Delay(100, cancelToken); | |||||
| await Task.Delay(100, cancelToken).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| catch (OperationCanceledException) { } | catch (OperationCanceledException) { } | ||||
| @@ -52,14 +52,14 @@ namespace Discord.Net.WebSockets | |||||
| _webSocket.OnError += async (s, e) => | _webSocket.OnError += async (s, e) => | ||||
| { | { | ||||
| _parent.RaiseOnLog(LogMessageSeverity.Error, e.Exception.GetBaseException().Message); | _parent.RaiseOnLog(LogMessageSeverity.Error, e.Exception.GetBaseException().Message); | ||||
| await _parent.DisconnectInternal(e.Exception, skipAwait: true); | |||||
| await _parent.DisconnectInternal(e.Exception, skipAwait: true).ConfigureAwait(false); | |||||
| }; | }; | ||||
| _webSocket.OnClose += async (s, e) => | _webSocket.OnClose += async (s, e) => | ||||
| { | { | ||||
| string code = e.WasClean ? e.Code.ToString() : "Unexpected"; | string code = e.WasClean ? e.Code.ToString() : "Unexpected"; | ||||
| string reason = e.Reason != "" ? e.Reason : "No Reason"; | string reason = e.Reason != "" ? e.Reason : "No Reason"; | ||||
| Exception ex = new Exception($"Got Close Message ({code}): {reason}"); | Exception ex = new Exception($"Got Close Message ({code}): {reason}"); | ||||
| await _parent.DisconnectInternal(ex, skipAwait: true); | |||||
| await _parent.DisconnectInternal(ex, skipAwait: true).ConfigureAwait(false); | |||||
| }; | }; | ||||
| _webSocket.Log.Output = (e, m) => { }; //Dont let websocket-sharp print to console | _webSocket.Log.Output = (e, m) => { }; //Dont let websocket-sharp print to console | ||||
| _webSocket.Connect(); | _webSocket.Connect(); | ||||