简体   繁体   English

无法从任务列表中获取结果

[英]Can't get result from task list

I have this async function that returns a Task 我有这个返回Task async函数

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 settings and then wait until all is completed 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 the data from the task? 如何从任务中获取数据?

Change your taskList to List<Task<SettingModel>> and also don't use task.Result to avoid Deadlock . taskList更改为List<Task<SettingModel>> ,也不要使用task.Result来避免死锁 Your code should be 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM