public async Task ReadAsync(string port, CancellationToken cancellationToken) { var dataflow = _dataflowFactory.Create(); try { using (var _serialPort = new SerialPort()) { _serialPort.PortName = port; _serialPort.BaudRate = 19200; _serialPort.Parity = Parity.None; _serialPort.DataBits = 8; _serialPort.StopBits = StopBits.One; _serialPort.Handshake = Handshake.None; _serialPort.Open(); while (false == cancellationToken.IsCancellationRequested) { string message = _serialPort.ReadLine(); dataflow.Start.Post(message); } _serialPort.Close(); } } finally { await Task.WhenAll(dataflow.Completions); await _repository.FinishTestSeriesAsync(_context.TestSeriesId); await _repository.SaveChangesAsync(); } }