Использование задачи.factory.startnew внутри объекта с блокировкойC#

Место общения программистов C#
Ответить
Anonymous
 Использование задачи.factory.startnew внутри объекта с блокировкой

Сообщение Anonymous »

Есть ли скрытые опасности при использовании многопоточного чтения внутри объекта, заблокированного блокировкой? , где почты могут быть переведены с 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»