@@ -230,7 +230,7 @@ namespace Discord.Audio | |||||
_secretKey = data.SecretKey; | _secretKey = data.SecretKey; | ||||
await ApiClient.SendSetSpeaking(true).ConfigureAwait(false); | await ApiClient.SendSetSpeaking(true).ConfigureAwait(false); | ||||
_connectTask.TrySetResult(true); | |||||
var _ = _connectTask.TrySetResultAsync(true); | |||||
} | } | ||||
break; | break; | ||||
case VoiceOpCode.HeartbeatAck: | case VoiceOpCode.HeartbeatAck: | ||||
@@ -530,8 +530,8 @@ namespace Discord | |||||
await _readyEvent.InvokeAsync().ConfigureAwait(false); | await _readyEvent.InvokeAsync().ConfigureAwait(false); | ||||
await SyncGuildsAsync().ConfigureAwait(false); | await SyncGuildsAsync().ConfigureAwait(false); | ||||
_connectTask.TrySetResult(true); //Signal the .Connect() call to complete | |||||
var _ = Task.Run(() => _connectTask.TrySetResult(true)); //Signal the .Connect() call to complete | |||||
await _gatewayLogger.InfoAsync("Ready").ConfigureAwait(false); | await _gatewayLogger.InfoAsync("Ready").ConfigureAwait(false); | ||||
} | } | ||||
break; | break; | ||||
@@ -96,9 +96,9 @@ namespace Discord | |||||
AddUser(model.Members[i], dataStore, members); | AddUser(model.Members[i], dataStore, members); | ||||
if (Discord.ApiClient.AuthTokenType != TokenType.User) | if (Discord.ApiClient.AuthTokenType != TokenType.User) | ||||
{ | { | ||||
_syncPromise.TrySetResult(true); | |||||
var _ = _syncPromise.TrySetResultAsync(true); | |||||
if (!model.Large) | if (!model.Large) | ||||
_downloaderPromise.TrySetResult(true); | |||||
_ = _downloaderPromise.TrySetResultAsync(true); | |||||
} | } | ||||
for (int i = 0; i < model.Presences.Length; i++) | for (int i = 0; i < model.Presences.Length; i++) | ||||
@@ -122,9 +122,9 @@ namespace Discord | |||||
DownloadedMemberCount = 0; | DownloadedMemberCount = 0; | ||||
for (int i = 0; i < model.Members.Length; i++) | for (int i = 0; i < model.Members.Length; i++) | ||||
AddUser(model.Members[i], dataStore, members); | AddUser(model.Members[i], dataStore, members); | ||||
_syncPromise.TrySetResult(true); | |||||
var _ = _syncPromise.TrySetResultAsync(true); | |||||
if (!model.Large) | if (!model.Large) | ||||
_downloaderPromise.TrySetResult(true); | |||||
_ = _downloaderPromise.TrySetResultAsync(true); | |||||
for (int i = 0; i < model.Presences.Length; i++) | for (int i = 0; i < model.Presences.Length; i++) | ||||
AddOrUpdateUser(model.Presences[i], dataStore, members); | AddOrUpdateUser(model.Presences[i], dataStore, members); | ||||
@@ -233,7 +233,7 @@ namespace Discord | |||||
} | } | ||||
public void CompleteDownloadMembers() | public void CompleteDownloadMembers() | ||||
{ | { | ||||
_downloaderPromise.TrySetResult(true); | |||||
_downloaderPromise.TrySetResultAsync(true); | |||||
} | } | ||||
public VoiceState AddOrUpdateVoiceState(VoiceStateModel model, DataStore dataStore, ConcurrentDictionary<ulong, VoiceState> voiceStates = null) | public VoiceState AddOrUpdateVoiceState(VoiceStateModel model, DataStore dataStore, ConcurrentDictionary<ulong, VoiceState> voiceStates = null) | ||||
@@ -0,0 +1,23 @@ | |||||
using System; | |||||
using System.Threading.Tasks; | |||||
namespace Discord | |||||
{ | |||||
internal static class TaskCompletionSourceExtensions | |||||
{ | |||||
public static Task SetResultAsync<T>(this TaskCompletionSource<T> source, T result) | |||||
=> Task.Run(() => source.SetResult(result)); | |||||
public static Task<bool> TrySetResultAsync<T>(this TaskCompletionSource<T> source, T result) | |||||
=> Task.Run(() => source.TrySetResult(result)); | |||||
public static Task SetExceptionAsync<T>(this TaskCompletionSource<T> source, Exception ex) | |||||
=> Task.Run(() => source.SetException(ex)); | |||||
public static Task<bool> TrySetExceptionAsync<T>(this TaskCompletionSource<T> source, Exception ex) | |||||
=> Task.Run(() => source.TrySetException(ex)); | |||||
public static Task SetCanceledAsync<T>(this TaskCompletionSource<T> source) | |||||
=> Task.Run(() => source.SetCanceled()); | |||||
public static Task<bool> TrySetCanceledAsync<T>(this TaskCompletionSource<T> source) | |||||
=> Task.Run(() => source.TrySetCanceled()); | |||||
} | |||||
} |
@@ -141,7 +141,7 @@ namespace Discord.Net.Queue | |||||
private async Task QueueResumeAsync(TaskCompletionSource<byte> resumeNotifier, int millis) | private async Task QueueResumeAsync(TaskCompletionSource<byte> resumeNotifier, int millis) | ||||
{ | { | ||||
await Task.Delay(millis).ConfigureAwait(false); | await Task.Delay(millis).ConfigureAwait(false); | ||||
resumeNotifier.SetResult(0); | |||||
resumeNotifier.TrySetResultAsync<byte>(0); | |||||
} | } | ||||
private async Task EnterAsync(int? endTick) | private async Task EnterAsync(int? endTick) | ||||