问题描述
我可以通过三种不同的方式在网络上查找新配置的设备,我希望所有这三种设备同时运行,但是一旦找到它们就立即停止所有运行。我不确定如何使用协同程序来完成此操作。这是我仅使用其中之一的方法:
scanningJob = lifecycleScope.launchWhenCreated {
val provisioningPing = ProvisioningPing(broadcastIP)
val provisionedDevice = provisioningPing.scan()
provisionedDevice?.let { provisioningDeviceFound(it) }
}
我想要类似以下的内容,但我不知道如何在Kotlin中实现它,也许以某种方式await
来实现?
scanningJob = lifecycleScope.launchWhenCreated {
val provisioningPing = ProvisioningPing(broadcastIP)
val provisioningUdp = ProvisioningUDP()
val provisioningMdns = ProvisioningMdns(context)
// How do I make these three lines run at the same time
// and then call provisioningDeviceFound(...) with whichever
// one returns first?
val provisionedDevicePing = provisioningPing.scan()
val provisionedDeviceUdp = provisioningUdp.scan()
val provisionedDeviceMdns = provisioningMdns.scan()
}
所有三种方法的scan
函数签名都是相同的:
suspend fun scan(): ProvisionedDevice? {
/* Cool scanning code here */
}
在provisioningDeviceFound(device: ProvisionedDevice)
函数中,它将调用scanningJob.cancel()
杀死所有三个挂起的函数,至少我认为这是阻止它们的方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)