private async Task ProcessReceivedMessage(object message) { if (message is Ack ack) { if (_pendingMessageId != ack.MessageId) { throw new InvalidOperationException("We screwed up."); } await _pendingMessage.Complete(); _pendingMessage = null; } else if (message is Nak nak) { if (_pendingMessageId != nak.MessageId) { throw new InvalidOperationException("We screwed up."); } await _pendingMessage.Abort(); _pendingMessage = null; } }
private async Task DeliverQueuedMessages() { while (true) { try { await _tcpClient.EnsureConnected(); } catch (SocketException) { await Task.Delay(5000); continue; } _pendingMessage = await _fileQueue.Dequeue(TimeSpan.FromSeconds(10)); if (_pendingMessage == null) { continue; } try { var transportMessage = new TransportMessage(_pendingMessage.Message); _pendingMessageId = transportMessage.Id; await _tcpClient.SendAsync(transportMessage); await Task.Delay(600000); } catch { await _pendingMessage.Abort(); _pendingMessage = null; throw; } } }