gpt4 book ai didi

具有协程上下文的 Android WorkManager 无法在同步模式下工作

转载 作者:行者123 更新时间:2023-12-04 15:25:55 26 4
gpt4 key购买 nike

我试图通过这种方式从 WorkManager 的挂起函数中获取结果

suspend fun uploadLogs(filePath: String): String {
val request = createRequest(createInputLogsData(filePath))
workManager.enqueue(request).await()
val url = workManager.getWorkInfoById(request.id).await().outputData.getString(KEY_URL)
return url
}

但看起来 await() 函数不起作用。在调用 await() 之后,请求的状态仍然是 ENQUEUED。

我需要在此协程上下文中从 WorkManager 同步获取结果。

也许我做错了什么?

最佳答案

您要实现的目标看起来像 immediate任务,而 WorkManager 是为 deferred tasks 设计的, 请参阅 background processing guide有关差异的更多详细信息。

WorkManager 不保证请求会立即执行。实际上,该请求可以在您的应用程序终止时甚至在设备重新启动后执行。无法等待请求完成。 WorkManager.enqueue() 方法不允许您等待请求结果,它只等待enqueue 操作完成。

因此,如果它是一项即时任务,您可以使用协程来执行它,它是 recommended way .如果是延迟任务,则使用 WorkManager 并将结果处理逻辑移至 worker 中。

关于具有协程上下文的 Android WorkManager 无法在同步模式下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62230571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com