我有一个回调方法,每当有新的数据可用时就会被调用:
这显然是一个经典的生产者-消费者问题:字节通过调用回调方法生成,通过Begin/EndRead和Read方法消耗。如果没有可用数据,则Begin/EndRead和Read方法应该阻塞(直到发生超时)。实现应使用固定大小的内部缓冲区,因此当缓冲区当前已满时,回调方法需要阻塞。
由于考虑多线程通常会导致严重的头痛,我的问题是:是否已经有这样一个数据结构的实现? (我认为实现Read方法应该很简单,但我想避免使用Read.
public delegate void DataCallback(
byte[] buffer,
int offset,
int count);
我希望将这个内容封装在一个类中,该类实现类似于以下接口的接口:
public interface IDataSource
{
IAsyncResult BeginRead(
byte[] buffer,
int offset,
int size,
TimeSpan timeout,
AsyncCallback callback,
object state);
int EndRead(
IAsyncResult asyncResult);
int Read(
byte[] buffer,
int offset,
int size,
TimeSpan timeout);
}
这显然是一个经典的生产者-消费者问题:字节通过调用回调方法生成,通过Begin/EndRead和Read方法消耗。如果没有可用数据,则Begin/EndRead和Read方法应该阻塞(直到发生超时)。实现应使用固定大小的内部缓冲区,因此当缓冲区当前已满时,回调方法需要阻塞。
由于考虑多线程通常会导致严重的头痛,我的问题是:是否已经有这样一个数据结构的实现? (我认为实现Read方法应该很简单,但我想避免使用Read.
Begin
/EndInvoke
来实现Begin/EndRead。)