Unable to get result from task list

I have this async function that returns Task

 public async Task<SettingModel> GetSetting(string key) { var rootPath = _hostingEnvironment.ContentRootPath; using (StreamReader r = new StreamReader(rootPath + key + "settings.json")) { string json = await r.ReadToEndAsync(); var settings = JsonConvert.DeserializeObject<SettingModel>(json); return settings; } } 

Now I want to get all the settings, and then wait until everything is complete, like this

 public async Task GetData(List<string> keys) { var taskList = new List<Task>(); foreach(var key in keys) { taskList.Add(GetSetting(key)); } await Task.WhenAll(taskList.ToList()); foreach (var task in taskList) { task.Result // here its not working. The task don't have a result :( } } 

How to get data from a task?

+5
source share
1 answer

Change taskList to List<Task<SettingModel>> , and also do not use task.Result to avoid Deadlock . Your code should look something like this:

 var taskList = new List<Task<SettingModel>>(); foreach(var key in keys) { taskList.Add(GetSetting(key)); } var result = await Task.WhenAll(taskList.ToList()).ConfigureAwait(false); 
+5
source

Source: https://habr.com/ru/post/1271849/


All Articles