У меня есть предыдущий вопрос , который я предоставил для решения;однако у меня нет доступа к ConcurrentQueue<T>
, так как я нахожусь на .Net 3.5.Мне нужно Queue<T>
, чтобы разрешить параллелизм.Я прочитал этот вопрос и, кажется, представляет проблему, если элемент не в очереди, а многопоточный метод пытается удалить элемент из очереди.
Моя задача сейчас состоит в том, чтобы определить, могу ли я получить собственный класс параллельной очереди.Вот что я придумал:
public sealed class ConcurrentQueue : Queue<DataTable>
{
public event EventHandler<TableQueuedEventArgs> 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<TableQueuedEventArgs> handler = TableQueued;
if (handler != null)
{
handler(this, table);
}
}
}
Итак, когда DataTable ставится в очередь, EventArgs будет передавать таблицу из очереди в очередь подписчику события.Будет ли эта реализация предоставлять мне потокобезопасную очередь?