Browse Source

Promise completions should be executed on the thread pool

tags/1.0-rc
RogueException 9 years ago
parent
commit
1aa908512f
5 changed files with 32 additions and 9 deletions
  1. +1
    -1
      src/Discord.Net/Audio/AudioClient.cs
  2. +2
    -2
      src/Discord.Net/DiscordSocketClient.cs
  3. +5
    -5
      src/Discord.Net/Entities/WebSocket/CachedGuild.cs
  4. +23
    -0
      src/Discord.Net/Extensions/TaskCompletionSourceExtensions.cs
  5. +1
    -1
      src/Discord.Net/Net/Queue/RequestQueueBucket.cs

+ 1
- 1
src/Discord.Net/Audio/AudioClient.cs View File

@@ -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:


+ 2
- 2
src/Discord.Net/DiscordSocketClient.cs View File

@@ -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;


+ 5
- 5
src/Discord.Net/Entities/WebSocket/CachedGuild.cs View File

@@ -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)


+ 23
- 0
src/Discord.Net/Extensions/TaskCompletionSourceExtensions.cs View File

@@ -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());
}
}

+ 1
- 1
src/Discord.Net/Net/Queue/RequestQueueBucket.cs View File

@@ -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)


Loading…
Cancel
Save