My function can read and send serial strings.
Read and write is in a while loop.
Right now the code stops at await dataReader.LoadAsync until a serial essage is received.
How do I make a timeout for this?
E.g. if nothing is received after 500ms, cancel await dataReader.LoadAsync and finish the loop.
I experimented with cancallationtokens, but without any success.
public async void Serial() { //configure serial setting //configure serial setting //configure serial setting //configure serial setting // Seriell while while (true) { //send dataWriter.WriteString(txBuffer); bytesWritten = await SerialPort.OutputStream.WriteAsync(dataWriter.DetachBuffer()); textblock_DebugTx_live.Text = txBuffer; //Ausgabe Debug Tx Senden //receive uint bytesToRead = await dataReader.LoadAsync(maxReadLength); string rxBuffer = dataReader.ReadString(bytesToRead); textblock_DebugRx_Gas_live.Text = rxBuffer; //Ausgabe Wert Alkoholsensor } //Seriell while } //Seriell When I try the follow, I get errors.
- maxReadLenght goes into task and not to bytesToRead.
- error at await task "uint contains no definition for GetWaiter"
- CancellationToken is invalid
//receive uint bytesToRead; int timeout = 1000; var task = await dataReader.LoadAsync(maxReadLength); if (await Task.WhenAny(task, Task.Delay(timeout, CancellationToken)) == task) { // Task completed within timeout. // Consider that the task may have faulted or been canceled. // We re-await the task so that any exceptions/cancellation is rethrown. await task; } else { // timeout/cancellation logic } string rxBuffer = dataReader.ReadString(bytesToRead);