c# – 在异步调用中使用IEnumerable.Aggregate
发布时间:2020-12-15 17:51:24 所属栏目:百科 来源:网络整理
导读:我正在尝试使用LINQ IEnumerable.Aggregate函数来创建一个由通过异步调用检索的文件组成的字符串.不是百分之百确定它是可能的,而且我也知道还有其他解决方案,但我想尝试一下. 现在我的代码看起来像这样: private static async Taskstring GetFiles(IEnumera
我正在尝试使用LINQ IEnumerable.Aggregate函数来创建一个由通过异步调用检索的文件组成的字符串.不是百分之百确定它是可能的,而且我也知道还有其他解决方案,但我想尝试一下.
现在我的代码看起来像这样: private static async Task<string> GetFiles(IEnumerable<string> filePaths) { return filePaths.Aggregate(async (current,path) => current + await GetFile(path)); } 但是方法调用中的“异步”是错误标记,“异步方法的返回必须为void,Task或Task”.我总体上得到了这个错误,但我不确定如何安排这个具体案例来避免它.有任何想法吗? 更新: private static async Task<string> GetFile(string filePath) { ... } 无需进入特定代码,但对于那些感兴趣的人,它使用HttpClient.GetAsync(filePath)并返回其response.Content.ReadAsStringAsync().结果. 解决方法
聚合方法不会异步工作.它不支持基于任务的代理.您需要在调用Aggregate方法之前等待它来自己创建结果序列.
这样的事情应该有效: private static async Task<string> GetFiles(IEnumerable<string> filePaths) { var files = filePaths .Select(p => GetFile(p)) .ToArray(); var results = await Task.WhenAll(files); return results .Aggregate((current,path) => current + path); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |