Я пытаюсь перебрать все результаты, получить из кэша дополнительное значение и добавить его в параллельный словарь. Я использую опцию «Продолжить», но это не гарантирует завершение выполнения задач.
private async Task PopulateValuesFromCacheToDictionaryTasks(
List searchResults)
{
List taskList = new();
foreach (var result in searchResults)
{
var currentId = result.Id;
var parentTask = _appCache.GetAsync(currentId ).ContinueWith(
x =>
{
if (_appDictionary.TryAdd(currentId , x.Result))
{
_logger.LogInformation($"Successfully added entry for {currentId } in dictionary");
}
else
{
_logger.LogError($"Unable to add entry {currentId } in dictionary");
}
}, TaskContinuationOptions.OnlyOnRanToCompletion);
taskList .Add(parentTask);
}
return taskList ;
}
//In the calling code
var listOfCacheFetchTasks =
PopulateValuesFromCacheToDictionaryTasks(searchResults);
await Task.WhenAll(listOfCacheFetchTasks );
// further processing based on the dictionary added values
Это не гарантирует, что продолжение кода (т. е.) добавление в словарь завершено.
Пытался добавить родительскую и дочернюю задачу по отдельности и ожидал обе задачи. тоже не работает
Я пытаюсь перебрать все результаты, получить из кэша дополнительное значение и добавить его в параллельный словарь. Я использую опцию «Продолжить», но это не гарантирует завершение выполнения задач. [code] private async Task PopulateValuesFromCacheToDictionaryTasks( List searchResults) { List taskList = new(); foreach (var result in searchResults) { var currentId = result.Id; var parentTask = _appCache.GetAsync(currentId ).ContinueWith( x => {
if (_appDictionary.TryAdd(currentId , x.Result)) { _logger.LogInformation($"Successfully added entry for {currentId } in dictionary"); } else { _logger.LogError($"Unable to add entry {currentId } in dictionary"); } }, TaskContinuationOptions.OnlyOnRanToCompletion); taskList .Add(parentTask); }
return taskList ;
}
//In the calling code
var listOfCacheFetchTasks = PopulateValuesFromCacheToDictionaryTasks(searchResults); await Task.WhenAll(listOfCacheFetchTasks );
// further processing based on the dictionary added values
[/code] Это не гарантирует, что продолжение кода (т. е.) добавление в словарь завершено. Пытался добавить родительскую и дочернюю задачу по отдельности и ожидал обе задачи. тоже не работает