限制可以在范围内运行的协程的最大数量

2023-11-23

我正在将当前的应用程序从 Java 翻译为 Kotlin,并且遇到了这个问题。

java实现过去使用线程从服务器传输数据。

它将创建大约 100 个不同的线程来请求数据,但据我所知,一次运行的线程不会超过 4 个,其他线程会等待线程完成后再开始。

将其翻译为 Kotlin 时我使用了 Coroutines

这会产生一个问题,因为显然服务器无法处理实际发送的 100 个请求。

所有协程都在同一范围内启动,所以它是这样的:

//this is a custom scope that launches on Dispatchers.IO + a job that I can use to cancel everything
transferScope.launch {
     //loadData is a suspending function that returns true/false 
     val futures = mDownloadJobs.map{ async { it.loadData() } }
     val responses = futures.awaitAll()
     //check that everything in responses is true etc....
}

有没有一种方法可以使特定的transferScope一次只允许最多5个协程,然后当一个协程完成时让另一个协程运行? (我不关心顺序)

如果无法通过范围来完成,是否有其他方法可以实现?


要求每个协程获取一个 KotlinSemaphore在提出请求之前,先从总共 5 个许可证中获得许可证。

像这样的东西:

    import kotlinx.coroutines.sync.Semaphore

    val requestSemaphore = Semaphore(5)

    val futures = mDownloadJobs.map {
        async {
            // Will limit number of concurrent requests to 5
            requestSemaphore.withPermit {
                it.loadData()
            }
        }
    }

    val responses = futures.awaitAll()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制可以在范围内运行的协程的最大数量 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 与其他图标相比,AppCompat ShareActionProvider 图标太大

    我将 ActionBarSherlock 更改为 AppCompat v7 我已经完成了使其工作所需的所有更改 但是共享图标 使用 ShareActionProvider 发生了一些奇怪的情况 与其他图标相比 共享图标太大 我还使用支持库进
  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • Android 应用被 Google Play 拒绝

    我最近向 Google Play 商店提交了一个 Android 应用程序 但收到一条消息说我的应用程序已被拒绝 我不确定问题是什么 也找不到确切的解决方案 拒绝原因 违反了禁止行为条款 内容政策 经过定期审核后 我们确定您的应用程序支持
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • 导航抽屉默认片段

    我是一名新手开发人员 我正在将导航抽屉与 android support v7 集成到我的应用程序中 我有一个问题 当我启动应用程序时 主要布局是这样的
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • 为什么Android应用程序在发布到市场后尺寸会增加?

    我最近在 Android 市场上发布了我的应用程序 显示应用程序大小为 5 4MB 而实际 apk 大小为 2 8MB 为什么显示多出2MB 我应该如何限制我的应用程序大小 请帮我 您的应用程序大小会增加 因为您使用了复制保护选项ON在发布
  • 在为 Android 实现 Google 登录时,任务“:app:transformClassesWithDexForDebug”执行失败

    我正在尝试为 Android 实现 Google 登录 并且我正在按照以下说明进行操作 https developers google com identity sign in android start integrating https
  • Android:解析 XML 数据的最佳解析器 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个应用程序 其中我第一次要解析来自远程服务器的 xml 文件中的数据 但我无法选择哪个解析器是有效的或最适合解析的 因为我知道主要有
  • 在没有 Wifi 的情况下获取 Android 设备的 MAC 地址

    如何获取没有 Wifi 接口的 Android 设备 例如 Android 模拟器 的网络接口的 MAC 地址 通过WifiManager返回获取的WifiInfonull EDIT 更清楚地说 我必须与本地网络上的现有网络协议 不是我设计
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • 删除R中的冗余列[重复]

    这个问题在这里已经有答案了 我有类似的东西 date pgm in x logs out y 20130514 na 12 j1 12 20131204 z2 03 j1 03 20130516 a01 04 j0 04 20130628
  • 迭代 numpy 数组列的所有成对组合

    我有一个大小为 numpy 的数组 arr size 200 600 20 我想计算scipy stats kendalltau在最后两个维度的每个成对组合上 例如 kendalltau arr 0 0 arr 1 0 kendalltau
  • JSP EL ${stuff} 语法不起作用

    我有两个问题 第一个是我使用JSP 无法解决 第二个是我的行为很奇怪 当我将其放入 servlet 的 doGet 方法中时 req setAttribute test SARASA req getRequestDispatcher WEB
  • df1 中不在 df2 中的所有行

    我有一个 df df1 如下所示 df1 pd DataFrame YYZ SFO 1 YYZ YYD 1 YYZ EWR 1 YYZ DFW 1 YYZ LAX 1 YYZ YYC 1 columns city1 city2 val 我有
  • 你能解释一下Java中的“isXxx”方法名称吗?

    规范之一中是否引用了以 is 开头的方法 而方法名称的后缀是属性名称 类似于 Java bean 的 getter setter 方法 例如 public boolean isConditionTrue private boolean co
  • CRM 365 callManagerInfo 插件中出现错误

    将 CRM 2013 本地升级到 CRM365 后 开始出现插件问题 每次我尝试使用插件中的 IOrganizationService 进行任何操作时 我都会收到错误 此问题仅在多服务器安装时出现 在CRM 2013版本上没有出现这种情况
  • 如何启用“启用.NET Framework 源代码步进”?

    2013 年 2 月 22 日更新 Microsoft Connect 条目有 Alok Shriram 程序经理 基类库 NET Framework 的注释 该问题现在应该得到解决 连接条目标记为已解决 已修复 这个问题现在应该得到解决
  • Android 类 BaseAdapter 中的 getItem 和 getItemId 方法的用途是什么?

    我很好奇这些方法的目的getItem and getItemId在 Android SDK 的 Adapter 类中 从描述来看 似乎getItem应该返回底层数据 所以 如果我有一个名字数组 cat dog red 我创建了一个适配器a使
  • 将数组中的连续数字分组

    我需要将连续数字添加到新数组中 如果不是连续数字 则仅将该值添加到新数组中 old array 1 2 3 5 7 8 9 20 21 23 29 我想得到这个结果 new array 1 2 3 5 7 8 9 20 21 23 29 有
  • 如何在 swift 3.0 中连接多个可选字符串?

    我正在尝试在 swift 3 中连接多个字符串 var a String a var b String b var c String c var d String a b c 编译时我收到以下错误 error cannot convert
  • 如何在 tail -f 命令后继续运行脚本

    我有以下脚本 tail f nohup out echo 5 When I press Ctrl C on tail f the script stops running the 5 is not printed How can I run
  • JScript.NET 可以用于编写 .NET 应用程序脚本吗?

    自从多发性硬化症似乎已在最新的 DLR 中终止了托管 JavaScript对于服务器端 ASP NET Futures 和客户端 Silverlight 是否有人成功使用未过时的 API 来允许使用 JScript NET 编写其应用程序对
  • Javamail API - 如何将 setFrom 更改为您想要的任何内容?

    如何将 setFrom 方法更改为我想要的方法 我可以通过我的 gmail 帐户发送电子邮件并更改 setFrom 文本 但它显示了我的username对于电子邮件 我也尝试使用我的雅虎帐户 但收到身份验证错误 我想更改发件人地址 代码如下
  • 如何绑定到 CaretIndex 又名文本框的光标位置

    嗨 我正在尝试绑定到TextBox CaretIndex属性不是DependencyProperty 所以我创建了一个Behavior 但它没有按预期工作 期望 集中注意力时 默认 0 如果我改变我的值view它应该改变我的值视图模型 如果
  • 以第一个元素作为主元的快速排序示例

    我目前正在研究快速排序 想知道当第一个 或最后一个 元素被选为枢轴点时它是如何工作的 比如说我有以下数组 15 19 34 41 27 13 9 11 44 这就是我认为发生的情况 15 19 34 41 27 13 9 11 44 piv
  • InvalidOperationException:堆栈为空

    我的应用程序工作正常 但突然停止工作并给出以下错误 InvalidOperationException Stack empty System ThrowHelper ThrowInvalidOperationException Except
  • 使用 phantomjs 的 cntlm 代理

    我正在尝试在 Windows 计算机上使用 cntlm 代理来与 IIS 上使用 PhantomJS 的 Windows 身份验证的本地 Web 应用程序进行通信 要创建代理 我正在执行以下操作 cntlm v u username dom
  • django-为什么重定向后,表单显示“无”

    我有一个表单 输入信息后 根据信息过滤数据库并进行一些计算 最后将结果显示到重定向的网址 我确实可以重定向到另一个网址并成功显示结果 但问题在于它无法显示用户提交的任何数据 只是对每个字段不显示任何内容 并且结果不是基于过滤后的查询集 比如
  • 用opencv找到手绘线的端点

    我试图找到手绘线的两个端点 我写了这个找到轮廓的片段 但终点不正确 img cv2 imread my img jpeg img gray cv2 cvtColor img cv2 COLOR BGR2GRAY Binary Thresho
  • 限制可以在范围内运行的协程的最大数量

    我正在将当前的应用程序从 Java 翻译为 Kotlin 并且遇到了这个问题 java实现过去使用线程从服务器传输数据 它将创建大约 100 个不同的线程来请求数据 但据我所知 一次运行的线程不会超过 4 个 其他线程会等待线程完成后再开始