public DeviceWorker(ILogger <DeviceWorker> logger, ISecsConnection hsmsConnection, ISecsGem secsGem) { _logger = logger; _hsmsConnection = hsmsConnection; _secsGem = secsGem; _hsmsConnection.ConnectionChanged += delegate { switch (_hsmsConnection.State) { case ConnectionState.Retry: _logger.LogError($"Connection loss, try to reconnect."); break; case ConnectionState.Connecting: case ConnectionState.Connected: _logger.LogWarning(_hsmsConnection.State.ToString()); break; default: _logger.LogInformation($"Connection state = {_hsmsConnection.State}"); break; } }; }
private void SendAsyncManyMessagesAtOnce(ISecsConnection connection1, ISecsConnection connection2, CancellationToken cancellation) { var secsGem1 = new SecsGem(optionsActive, connection1, Substitute.For <ISecsGemLogger>()); var secsGem2 = new SecsGem(optionsPassive, connection2, Substitute.For <ISecsGemLogger>()); _ = Task.Run(async() => { var pong = new SecsMessage(s: 1, f: 14, replyExpected: false) { SecsItem = A("Pong"), }; await foreach (var a in secsGem2.GetPrimaryMessageAsync(cancellation)) { await a.TryReplyAsync(pong); } }); Func <Task> sendAsync = async() => { var ping = new SecsMessage(s: 1, f: 13) { SecsItem = A("Ping"), }; var sendCount = 10000; var totalTasks = new List <Task <SecsMessage> >(capacity: sendCount); for (var g = 0; g < sendCount; g++) { totalTasks.Add(secsGem1.SendAsync(ping, cancellation).AsTask()); } await Task.WhenAll(totalTasks.ToArray()); }; sendAsync.Should().NotThrowAsync(); }