У меня есть предыдущий вопрос , решение которого я предложил; однако у меня нет доступа к ConcurrentQueue
, поскольку я использую .Net 3.5. Мне нужна Queue
, чтобы разрешить параллелизм. Я прочитал этот вопрос и, похоже, представляет проблему, если элемент находится в очереди , а не , а поточный метод пытается удалить элемент из очереди.
Теперь моя задача - определить, могу ли я создать собственный параллельный класс Queue. Вот что я придумал:
public sealed class ConcurrentQueue : Queue
{
public event EventHandler TableQueued;
private ICollection que;
new public void Enqueue(DataTable Table)
{
lock (que.SyncRoot)
{
base.Enqueue(Table);
}
OnTableQueued(new TableQueuedEventArgs(Dequeue()));
}
// this is where I think I will have a problem...
new public DataTable Dequeue()
{
DataTable table;
lock (que.SyncRoot)
{
table = base.Dequeue();
}
return table;
}
public void OnTableQueued(TableQueuedEventArgs table)
{
EventHandler handler = TableQueued;
if (handler != null)
{
handler(this, table);
}
}
}
Итак, когда DataTable помещается в очередь, EventArgs передаст исключенную из очереди таблицу подписчику на событие. Предоставит ли эта реализация мне потокобезопасную очередь?