В настоящее время я пишу приложение С#. Я новичок в использовании 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();
}
}
}
Удержание нескольких потоков может вызвать метод "Выполнить", который ищет вызов метода Execute для ITask. Моя цель состоит в том, чтобы все потоки были безопасными и максимально эффективными.