【发布时间】:2016-12-07 21:32:04
【问题描述】:
我有一个来自 FromStream 的 C# async 函数,我正试图从 Bluetooth LE 流中读取它。
public static async Task<MySerialPacket> FromStream(Stream stream, HashComputingFunc computeHash, IMyMessageFactory factory)
{
var packet = new MySerialPacket(computeHash);
packet.m_header = await MySerialHeader.FromStream(stream, computeHash);
var b = new byte[packet.m_header.DataLength];
var bytes_read = await stream.ReadAsync(b, 0, packet.m_header.DataLength);
packet.VerifyCheckSum(b, "Data");
var count = b[0];
if (count > 0)
{
var lengths = new short[count];
for (var i = 0; i < count; i++)
{
lengths[i] = (short)(b[1 + i * 2] | b[2 + i * 2] >> 8);
}
var startByte = 1 + 2 * count;
for (var i = 0; i < count; i++)
{
var m = b.Skip(startByte).Take(lengths[i]).ToArray();
packet.Message = factory.FromBytes(m);
}
}
return packet;
}
ReadAsync 当前返回小于或等于DataLength(请求的字节数)的非零字节数。
如您所见,我需要DataLength 字节来生成格式良好的数据包。处理此问题的明智方法是什么。 C# 框架是否提供任何功能来处理这种情况。理想情况下,我更喜欢非阻塞方式。
【问题讨论】:
-
@Noseratio - 你能看看这个问题吗?非常感谢
标签: c# asynchronous bluetooth async-await bluetooth-lowenergy