diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj
index 126b6dcec..2e311d51e 100644
--- a/src/Discord.Net.Net45/Discord.Net.csproj
+++ b/src/Discord.Net.Net45/Discord.Net.csproj
@@ -122,6 +122,9 @@
Helpers\JsonHttpClient.Events.cs
+
+ Helpers\TaskHelper.cs
+
HttpException.cs
diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs
index 44b4cd2d6..4e62571e5 100644
--- a/src/Discord.Net/DiscordClient.cs
+++ b/src/Discord.Net/DiscordClient.cs
@@ -645,15 +645,15 @@ namespace Discord
/// Sends a PCM frame to the voice server.
/// PCM frame to send.
/// Number of bytes in this frame.
- public void SendVoicePCM(byte[] data, int count)
+ public Task SendVoicePCM(byte[] data, int count)
{
CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
- if (count == 0) return;
+ if (count == 0) return TaskHelper.CompletedTask;
if (_isDebugMode)
RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Queued {count} bytes for voice output.");
- _voiceWebSocket.SendPCMFrame(data, count);
+ return _voiceWebSocket.SendPCMFrame(data, count);
}
/// Clears the PCM buffer.
diff --git a/src/Discord.Net/DiscordDataSocket.cs b/src/Discord.Net/DiscordDataSocket.cs
index bced9a8a2..59700e737 100644
--- a/src/Discord.Net/DiscordDataSocket.cs
+++ b/src/Discord.Net/DiscordDataSocket.cs
@@ -1,4 +1,5 @@
using Discord.API.Models;
+using Discord.Helpers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
@@ -81,11 +82,7 @@ namespace Discord
RaiseOnDebugMessage(DebugMessageType.WebSocketUnknownOpCode, "Unknown Opcode: " + msg.Operation);
break;
}
-#if DNXCORE
- return Task.CompletedTask
-#else
- return Task.Delay(0);
-#endif
+ return TaskHelper.CompletedTask;
}
protected override object GetKeepAlive()
diff --git a/src/Discord.Net/DiscordVoiceSocket.cs b/src/Discord.Net/DiscordVoiceSocket.cs
index 91b37e939..b439afbb5 100644
--- a/src/Discord.Net/DiscordVoiceSocket.cs
+++ b/src/Discord.Net/DiscordVoiceSocket.cs
@@ -369,25 +369,27 @@ namespace Discord
}
}
- public void SendPCMFrame(byte[] data, int count)
+ public Task SendPCMFrame(byte[] data, int count)
{
if (count != _encoder.FrameSize)
throw new InvalidOperationException($"Invalid frame size. Got {count}, expected {_encoder.FrameSize}.");
- lock (_encoder)
+ byte[] payload;
+ int encodedLength;
+ lock (_encoder)
{
- byte[] payload = new byte[4000];
- int encodedLength = _encoder.EncodeFrame(data, payload);
+ payload = new byte[4000];
+ encodedLength = _encoder.EncodeFrame(data, payload);
if (_mode == "xsalsa20_poly1305")
{
//TODO: Encode
}
-
- lock (_sendQueue)
- _sendQueue.Enqueue(new Packet(payload, encodedLength));
}
- }
+ _sendQueue.Enqueue(new Packet(payload, encodedLength));
+
+ return Task.Delay(0);
+ }
public void ClearPCMFrames()
{
_isClearing = true;
diff --git a/src/Discord.Net/Helpers/TaskHelper.cs b/src/Discord.Net/Helpers/TaskHelper.cs
new file mode 100644
index 000000000..31d902465
--- /dev/null
+++ b/src/Discord.Net/Helpers/TaskHelper.cs
@@ -0,0 +1,17 @@
+using System.Threading.Tasks;
+
+namespace Discord.Helpers
+{
+ internal static class TaskHelper
+ {
+ public static Task CompletedTask { get; }
+ static TaskHelper()
+ {
+#if DNXCORE50
+ CompletedTask = Task.CompletedTask;
+#else
+ CompletedTask = Task.Delay(0);
+#endif
+ }
+ }
+}