diff --git a/Components/MineSharp.Protocol/MinecraftClient.cs b/Components/MineSharp.Protocol/MinecraftClient.cs index fffe8d14..8c826dd6 100644 --- a/Components/MineSharp.Protocol/MinecraftClient.cs +++ b/Components/MineSharp.Protocol/MinecraftClient.cs @@ -159,7 +159,7 @@ public async Task Connect(GameState nextState) client = await tcpTcpFactory.CreateOpenConnection(ip, Port); stream = new(client.GetStream(), Data.Version.Protocol); - StreamLoop(); + streamLoop = Task.Run(StreamLoop); Logger.Info("Connected, starting handshake..."); await HandshakeProtocol.PerformHandshake(this, nextState, Data); } @@ -352,26 +352,23 @@ internal void HandleBundleDelimiter() Logger.Debug("Bundling packets!"); } } - - private void StreamLoop() + + private async Task StreamLoop() { - streamLoop = Task.Run(async () => + while (!cancellationTokenSource.Token.IsCancellationRequested) { - while (!cancellationTokenSource.Token.IsCancellationRequested) + try { - try - { - await ReceivePackets(); - await SendPackets(); + await ReceivePackets(); + await SendPackets(); - await Task.Delay(1); - } - catch (Exception ex) - { - Logger.Error(ex, "Encountered error in stream loop"); - } + await Task.Delay(1); + } + catch (Exception ex) + { + Logger.Error(ex, "Encountered error in stream loop"); } - }, cancellationTokenSource.Token); + } } private async Task ReceivePackets() @@ -424,9 +421,12 @@ private Task SendPackets() DispatchPacket(task.Packet); - task.Task.TrySetResult(); - _ = Task.Run(() => HandleOutgoingPacket(task.Packet)); + _ = Task.Run(async () => + { + task.Task.TrySetResult(); + await HandleOutgoingPacket(task.Packet); + }); return Task.CompletedTask; }