0

我正在执行一个线程和一个任务。 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();
     }
}
4

0 回答 0