Включение очереди с параллелизмом

У меня есть предыдущий вопрос , решение которого я предложил; однако у меня нет доступа к 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 передаст исключенную из очереди таблицу подписчику на событие. Предоставит ли эта реализация мне потокобезопасную очередь?

10
задан Community 23 May 2017 в 11:52
поделиться