Заполнение словаря C# в асинхронном режиме с помощью условных аргументов перед доступом из потоков, читающих содержимое C#

Место общения программистов C#
Ответить
Гость
 Заполнение словаря C# в асинхронном режиме с помощью условных аргументов перед доступом из потоков, читающих содержимое

Сообщение Гость »


Я работаю над приложением async, которое заполняет словарь парами «ключ-значение» данных из одной системы, а затем использует словарь, чтобы определить, есть ли во второй системе совпадающие данные. Проблема в том, что словарь не завершает заполнение своих данных до того, как другие потоки попытаются найти данные в парах ключ-значение, что дает неправильные результаты.

Я попытался преобразовать исходный код, который представляет собой метод void, в асинхронный метод, возвращающий задачу. Что-то, что начинается как

async Task CreateGALEmailTypesDictionary(IEnumerable? interActionClientAllRecords, SearchResultCollection ADClientAllRecords) но поскольку вся логика внутри метода основана на условных операторах и не требует дополнительной асинхронности, я не увидел способа использовать await или Task.WhenAll.< /п> Ниже приведен исходный код для заполнения словаря. Как я могу использовать эту логику в асинхронном приложении и гарантировать, что словарь заполнится до того, как другие процессы прочитают содержащиеся в нем данные?
public void ReviewGALEmailTypesForDeletions(IEnumerable? interActionClientAllRecords, SearchResultCollection ADClientAllRecords) { нить? InterAction_GAL_EmailType = string.Empty; нить? AD_GAL_EmailTypeInInterAction = string.Empty; если (interActionClientAllRecords не равно нулю) { Словарь InterActionGALEmailTypes = новый словарь(); foreach (InterActionQueryResult_BaseClass interActionClientRecord в interActionClientAllRecords) { //Типы электронной почты InterAction GAL могут содержать пробелы, а типы электронной почты AD GAL — нет. Пробелы удалены для последующего сопоставления. если (interActionClientRecord.InterActionEmailType имеет значение null) InterAction_GAL_EmailType = string.Empty; еще InterAction_GAL_EmailType = interActionClientRecord.InterActionEmailType.Replace(" ", string.Empty); если (interActionClientRecord.GALEmailType имеет значение null) interActionClientRecord.GALEmailType = string.Empty; еще AD_GAL_EmailTypeInInterAction = interActionClientRecord.GALEmailType.Replace(" ", string.Empty); если (!InterActionGALEmailTypes.ContainsKey(InterAction_GAL_EmailType)) InterActionGALEmailTypes.Add(InterAction_GAL_EmailType, AD_GAL_EmailTypeInInterAction); } //Ищем ADClientAllRecords в словаре
Ответить

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

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

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

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

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