c# - 从后台任务创建集合
问题描述
我有一个 C# Web 服务,其中有一个名为“async GetUser(string userid)”的方法。在我的一种方法中,我有一组用户 ID。我想做的是这样的:
ICollection<User> users = /* Run GetUser(userid) for each userid concurrently*/
在我习惯的其他语言中,比如 Go,我会做的是在后台运行所有“func”,并让它们中的每一个推送到通道并简单地收集数据,直到所有后台作业完成。
在 C# 中执行此操作的正确方法是什么?
解决方案
ICollection<User> users = await Task.WhenAll(userids.Select(GetUser));
Select
GetUser
为每个 id运行并返回一个Task<User>
.
Task.WhenAll
等待所有任务完成,并将await
结果解包到一个数组中。
推荐阅读
- android - 在移动测试类中使用 System.getProperty("os.name") 不会提供连接设备的 os.name
- css - Xamarin 使用垂直集合视图形成 x 轴溢出
- javascript - 当 JS 移动到外部文件时,我的任何控件使用的 JS 函数都无法正常工作
- javascript - 为什么 window.onpopstate 使用 history.go 被调用两次?
- javascript - 如何删除字符串中的所有数字和所有标点符号?
- python - 在 Window 的 Linux 子系统中运行 python 时出现内存错误
- agents-jade - 使用主类初始化的两个代理之间的通信
- php - 如何通过 CodeIgniter 和 Ajax 将 MySQL 表数据提取到数据表中不起作用
- jenkins - 'sh: sh: command not found' 在多分支管道中使用 withCredentials 块时
- javascript - webdriverio 5 用于单元测试和功能测试