我有一个长时间运行的进程,将数据发送到另一台机器。但是这些数据以块的形式接收(例如一组100个数据包,然后最少延迟10秒)。
我使用Task.Run(() => { SendPackets(); });
在单独的线程上启动了发送函数。
要发送的数据包由其他功能排队在Queue<Packet>
对象中。
在SendPackets()
中,我使用while循环来检索并异步发送队列中所有可用项目。
void SendPackets()
{
while(isRunning)
{
while(thePacketQueue.Count > 0)
{
Packet pkt = thePacketQueue.Dequeue();
BeginSend(pkt, callback); // Actual code to send data over asynchronously
}
Task.Delay(1000); // <---- My question lies here
}
}
所有锁都已经就位!
我的问题是,当我使用 Task.Delay
时,下一个周期是否可能由与当前线程不同的线程执行?
是否有其他方法,可以使用类似于 ManualResetEvent
的东西,而不是对1秒钟的延迟进行指定,并且相应的代码是什么(我不知道如何使用 ManualResetEvent
等)。
此外,我对异步/等待和 TPL 不熟悉,请谅解我无知。
谢谢您提前。
Queue
? - Damien_The_Unbeliever