@@ -1,6 +1,8 @@ | |||||
using Discord.Helpers; | using Discord.Helpers; | ||||
using Discord.WebSockets.Data; | using Discord.WebSockets.Data; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Runtime.ExceptionServices; | using System.Runtime.ExceptionServices; | ||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -210,7 +212,7 @@ namespace Discord | |||||
private async Task RunTasks() | private async Task RunTasks() | ||||
{ | { | ||||
Task[] tasks = GetTasks(); | |||||
Task[] tasks = GetTasks().ToArray(); | |||||
Task firstTask = Task.WhenAny(tasks); | Task firstTask = Task.WhenAny(tasks); | ||||
Task allTasks = Task.WhenAll(tasks); | Task allTasks = Task.WhenAll(tasks); | ||||
@@ -239,7 +241,7 @@ namespace Discord | |||||
_connectedEvent.Reset(); | _connectedEvent.Reset(); | ||||
_runTask = null; | _runTask = null; | ||||
} | } | ||||
protected virtual Task[] GetTasks() | |||||
protected virtual IEnumerable<Task> GetTasks() | |||||
{ | { | ||||
return new Task[] { _cancelToken.Wait() }; | return new Task[] { _cancelToken.Wait() }; | ||||
} | } | ||||
@@ -108,7 +108,7 @@ namespace Discord.WebSockets.Voice | |||||
catch (OperationCanceledException) { } | catch (OperationCanceledException) { } | ||||
} | } | ||||
protected override Task[] GetTasks() | |||||
protected override IEnumerable<Task> GetTasks() | |||||
{ | { | ||||
_isClearing = false; | _isClearing = false; | ||||
@@ -2,6 +2,7 @@ | |||||
using Discord.Helpers; | using Discord.Helpers; | ||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | |||||
using System.ComponentModel; | using System.ComponentModel; | ||||
using System.Net.WebSockets; | using System.Net.WebSockets; | ||||
using System.Text; | using System.Text; | ||||
@@ -50,7 +51,7 @@ namespace Discord.WebSockets | |||||
return TaskHelper.CompletedTask; | return TaskHelper.CompletedTask; | ||||
} | } | ||||
public Task[] GetTasks(CancellationToken cancelToken) | |||||
public IEnumerable<Task> GetTasks(CancellationToken cancelToken) | |||||
{ | { | ||||
return new Task[] | return new Task[] | ||||
{ | { | ||||
@@ -2,6 +2,7 @@ | |||||
using Discord.Helpers; | using Discord.Helpers; | ||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using WSSharpNWebSocket = WebSocketSharp.WebSocket; | using WSSharpNWebSocket = WebSocketSharp.WebSocket; | ||||
@@ -68,7 +69,7 @@ namespace Discord.WebSockets | |||||
return TaskHelper.CompletedTask; | return TaskHelper.CompletedTask; | ||||
} | } | ||||
public Task[] GetTasks(CancellationToken cancelToken) | |||||
public IEnumerable<Task> GetTasks(CancellationToken cancelToken) | |||||
{ | { | ||||
return new Task[] | return new Task[] | ||||
{ | { | ||||
@@ -1,6 +1,7 @@ | |||||
using Discord.Helpers; | using Discord.Helpers; | ||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Runtime.ExceptionServices; | using System.Runtime.ExceptionServices; | ||||
using System.Text; | using System.Text; | ||||
@@ -29,7 +30,7 @@ namespace Discord.WebSockets | |||||
Task Connect(string host, CancellationToken cancelToken); | Task Connect(string host, CancellationToken cancelToken); | ||||
Task Disconnect(); | Task Disconnect(); | ||||
void QueueMessage(string message); | void QueueMessage(string message); | ||||
Task[] GetTasks(CancellationToken cancelToken); | |||||
IEnumerable<Task> GetTasks(CancellationToken cancelToken); | |||||
} | } | ||||
internal abstract partial class WebSocket | internal abstract partial class WebSocket | ||||
@@ -162,7 +163,7 @@ namespace Discord.WebSockets | |||||
protected virtual async Task RunTasks() | protected virtual async Task RunTasks() | ||||
{ | { | ||||
Task[] tasks = GetTasks(); | |||||
Task[] tasks = GetTasks().ToArray(); | |||||
Task firstTask = Task.WhenAny(tasks); | Task firstTask = Task.WhenAny(tasks); | ||||
Task allTasks = Task.WhenAll(tasks); | Task allTasks = Task.WhenAll(tasks); | ||||
@@ -180,12 +181,11 @@ namespace Discord.WebSockets | |||||
//Start cleanup | //Start cleanup | ||||
await Cleanup().ConfigureAwait(false); | await Cleanup().ConfigureAwait(false); | ||||
} | } | ||||
protected virtual Task[] GetTasks() | |||||
protected virtual IEnumerable<Task> GetTasks() | |||||
{ | { | ||||
var cancelToken = _cancelToken; | var cancelToken = _cancelToken; | ||||
return _engine.GetTasks(cancelToken) | |||||
.Concat(new Task[] { HeartbeatAsync(cancelToken) }) | |||||
.ToArray(); | |||||
return _engine.GetTasks(cancelToken) | |||||
.Concat(new Task[] { HeartbeatAsync(cancelToken) }); | |||||
} | } | ||||
protected virtual async Task Cleanup() | protected virtual async Task Cleanup() | ||||
{ | { | ||||