我发送一个7字节的TX命令,我将接收一个7字节的RX响应。
如果可能,我想将接收字节任务链接到发送字节任务,因为这似乎只是逻辑上的。
我知道后台工作人员已经过时了,他们希望通过使用Task-Parallel-Library来实现代码的现代化。
有人能解释一下如何在所描述的上下文中用异步任务替换backgroundWorker_DoWork事件处理程序吗?
发布于 2020-03-19 22:05:25
如果您总是先发送字节,然后再接收字节,则可以使用如下代码:
public static class NetworkStreamExtensions
{
public static async Task<byte[]> SendReceiveBytes(this NetworkStream self, byte[] toSend, int bytesToReceive, CancellationToken cancel)
{
await self.WriteAsync(toSend, 0, toSend.Length, cancel);
var receiveBuffer = new byte[bytesToReceive];
var receivedBytes = await self.ReadAsync(receiveBuffer, 0, receiveBuffer.Length, cancel);
if (receivedBytes != receiveBuffer.Length)
{
// Handle incorrect number of received bytes,
}
return receiveBuffer;
}
}因为这是使用async/await,所以它将使用当前的同步上下文来运行代码。也就是说,如果在主线程上调用,它将在主线程上发送和接收。但是,它将允许其他代码在写入和读取之间运行,因为异步方法不会阻止执行。
https://stackoverflow.com/questions/60757757
复制相似问题