несколько вопросов по использованию ConcurrentDictionary

Сейчас я пишу приложение на C#. Я новичок в использовании ConcurrentDictionary, поэтому у меня есть некоторые вопросы, связанные с его потокобезопасностью. Во-первых, это мой словарь:

    /// <summary>
    /// A dictionary of all the tasks scheduled
    /// </summary>
    private ConcurrentDictionary<string, ITask> tasks;

я создаю его экземпляр в своем классе и использую его для отслеживания всех моих объектов, реализующих ITask. Я хочу убедиться, что моя установка будет работать правильно в многопоточной среде.

Если несколько потоков хотят получить подсчет количества элементов в ConcurrentDictionary, нужно ли мне его блокировать?

Если я хочу получить конкретный ключ из словаря, получить объект этого ключа и вызвать для него метод, нужно ли мне его блокировать? например:

    /// <summary>
    /// Runs a specific task.
    /// </summary>
    /// <param name="name">Task name.</param>
    public void Run(string name)
    {
        lock (this.syncObject)
        {
            var task = this.tasks[name] as ITask;
            if (task != null)
            {
                task.Execute();
            }
        }
    }

Помня о том, что несколько потоков могут вызывать метод Run, пытаясь вызвать метод Execute ITask. Моя цель — сделать все потокобезопасным и максимально производительным.

10
задан amateur 9 May 2012 в 01:12
поделиться