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;
await ApiClient.SendSetSpeaking(true).ConfigureAwait(false);

_connectTask.TrySetResult(true);
var _ = _connectTask.TrySetResultAsync(true);
}
break;
case VoiceOpCode.HeartbeatAck:


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

@@ -530,8 +530,8 @@ namespace Discord

await _readyEvent.InvokeAsync().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);
}
break;


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

@@ -96,9 +96,9 @@ namespace Discord
AddUser(model.Members[i], dataStore, members);
if (Discord.ApiClient.AuthTokenType != TokenType.User)
{
_syncPromise.TrySetResult(true);
var _ = _syncPromise.TrySetResultAsync(true);
if (!model.Large)
_downloaderPromise.TrySetResult(true);
_ = _downloaderPromise.TrySetResultAsync(true);
}

for (int i = 0; i < model.Presences.Length; i++)
@@ -122,9 +122,9 @@ namespace Discord
DownloadedMemberCount = 0;
for (int i = 0; i < model.Members.Length; i++)
AddUser(model.Members[i], dataStore, members);
_syncPromise.TrySetResult(true);
var _ = _syncPromise.TrySetResultAsync(true);
if (!model.Large)
_downloaderPromise.TrySetResult(true);
_ = _downloaderPromise.TrySetResultAsync(true);

for (int i = 0; i < model.Presences.Length; i++)
AddOrUpdateUser(model.Presences[i], dataStore, members);
@@ -233,7 +233,7 @@ namespace Discord
}
public void CompleteDownloadMembers()
{
_downloaderPromise.TrySetResult(true);
_downloaderPromise.TrySetResultAsync(true);
}

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)
{
await Task.Delay(millis).ConfigureAwait(false);
resumeNotifier.SetResult(0);
resumeNotifier.TrySetResultAsync<byte>(0);
}

private async Task EnterAsync(int? endTick)


Loading…
Cancel
Save