我正在做一些TCP编程,并且我想模拟一些延迟。
每个“消息”(代表序列化对象的byte [])必须延迟一段时间t。我以为我可以使用一种功能来收集原始消息:
private Queue<byte[]> rawMessages = new Queue<byte[]>();
private void OnDataReceived(object sender, byte[] data)
{
rawMessages.Enqueue(data);
}
带有while循环的另一种方法,该方法可以连续读取rawMessages并延迟每个循环:
private Queue<byte[]> delayedRawMessages = new Queue<byte[]>();
delayMessagesInTask = Task.Factory.StartNew(() =>
{
while (true) //TODO: Swap a cancellation token
{
if(rawMessages.Count > 0){
var rawMessage = rawMessages.Dequeue();
//???
//Once the message has been delayed, enqueue it into another buffer.
delayedRawMessages.Enqueue(rawMessage);
}
}
});
我以为要延迟每条消息,我可以有另一种方法来生成线程,该线程Thread.Sleep(t)用于等待时间t然后排队delayedRawMessages。我敢肯定这会奏效,但我认为必须有更好的方法。该Thread.Sleep方法的问题在于,消息2可能会在消息1之前完成延迟……我显然需要将消息延迟并以正确的顺序执行,否则我将不会使用TCP。
我正在寻找一种方法来做到这一点,该方法将t尽可能长时间地延迟,并且不会通过降低速度来影响应用程序的其余部分。
这里有人知道更好的方法吗?
慕运维8079593
相关分类