我正在执行一个线程和一个任务。 ReceiveThread 是主题,它持续从网络接收数据, WriteTask 是任务,用于写入ReceiveThread的数据接收到缓冲区。它们位于不同的线程中,因为我仍然能够接收高速数据并将它们存储在缓冲区中,而较慢的编写器只能以一定间隔从缓冲区中获取。
ReceiveThread和WriteTask共享一个公共缓冲区,它使用ReaderWriterLockSlim来避免读写访问错误。我恰好在WriteTask之前创建了ReceiveThread,但我应该尽快将它们制作成相同的类型。我只是注意到,当我在WriteTask中休息时,ReceiveThread也会暂停,我没想到会发生这种情况,因为我希望它们是独立的线程/任务。
我想知道作为一个线程和一个任务是不是将两者视为单独任务的因素。
这不是完整的源代码,但不知何故,这个想法是这样的。
if (_receiveThread == null)
{
_receiveThread = new Thread(new ThreadStart(ReceiveLoop));
_receiveThread.Start();
}
if (_writeTask == null)
{
_writeTask = Task.Factory.StartNew(WriteLoop);
}
private void ReceiveLoop()
{
while (true)
{
data = ReceiveData();
_rwLock.EnterReadLock();
_buffer.Add(data)
_rwLock.ExitReadLock();
}
}
private void WriteLoop()
{
while (true)
{
_rwLock.EnterWriteLock();
WriteToFile(_buffer);
_rwLock.ExitWriteLock();
}
}