Есть ли скрытые опасности при использовании многопоточного чтения внутри объекта, заблокированного блокировкой? , где почты могут быть переведены с 3 других языков, потому что почтовая транспорта будет иметь многоязычный контент. (Языковые) словари помещаются в общий контейнерный объект. Эти словаря очень большие и зависят от чтения слов для переводов из языковых файлов. Чтобы предотвратить две или более почты для изменения контейнера и языковых словарей одновременно, я использую блокировку в вызове метода. Поскольку в каждой почте может быть контент из нескольких языков, я хочу сделать доступ к файлу к различным языковым файлам параллельно для лучшей производительности и пользовательского опыта. < /P>
Код: Выделить всё
Dictionary Dictionaries;
Dictionary NewWords;
public void UpdatelanguageDictionaries()
{
lock(_lock)
{
DoStuff();
int i = 0;
Task[] tasks = new Task[3];
foreach(KeyvaluePair kvp in Dictionaries)
{
tasks[i] = TaskFactory.StartNew(() => kvp.Value.UpdateFromFile(NewWords[kvp.Key]));
i++;
}
Task.WaitAll();
DoMoreStuff();
}
}
Сначала я попытался использовать многопоточное чтение с
wait и
async , но это не допускается внутри оператора блокировки (индикация с многопоточной чтением внутри блокировки ). в последовательности. Ошибки из -за многопоточного чтения также известно, что их трудно идентифицировать, поэтому у меня не будет много времени, чтобы определить ошибку, если это просто плохая идея использовать многопоточное чтение внутри блокировки. < /P>
Так это сохранило для запуска многопоточного кода внутри оператора блокировки или я должен избежать его?
Подробнее здесь:
https://stackoverflow.com/questions/541 ... -with-lock