c# - 如何使用 C#8 IAsyncEnumerable异步枚举任务并行运行
问题描述
如果可能的话,我想为并行启动的任务创建一个异步枚举器。所以首先完成的是枚举的第一个元素,第二个完成的是枚举的第二个元素,依此类推。
public static async IAsyncEnumerable<T> ParallelEnumerateAsync(this IEnumerable<Task<T>> coldAsyncTasks)
{
// ...
}
我敢打赌,有一种使用ContinueWith
和 a的方法Queue<T>
,但我并不完全相信自己可以实现它。
解决方案
这是你要找的吗?
public static async IAsyncEnumerable<T> ParallelEnumerateAsync<T>(
this IEnumerable<Task<T>> tasks)
{
var remaining = new List<Task<T>>(tasks);
while (remaining.Count != 0)
{
var task = await Task.WhenAny(remaining);
remaining.Remove(task);
yield return (await task);
}
}
推荐阅读
- video - 将 .osp OpenShot 项目导出到 ffmpeg 脚本,作为通过交换地狱解决视频导出冻结或崩溃的方法
- ios - 如何在 iPhone 中快速从文件路径 url 获取视频或图像?
- android - DaggerAppComponent - 未解决的参考
- spring-boot - Spring Boot 执行器页面返回 http 链接而不是 https
- typescript - 类实例的打字稿约束不是对象
- gensim - 从 gensim LDA 模型中提取主题分布
- mysql - 使用许多连接和过滤器优化 MySQL 查询
- javascript - 我可以在 react native 中使用 webview 作为屏幕背景吗?如果是,如何?
- git - 数据科学项目的分支
- php - 退回的电子邮件处理程序 PHP