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