工人经理:不在队列中开始工作

2023-12-30

我有这样的代码,我需要实现任务队列,如果任务在队列中,那么就不需要添加它。 我的实现如图所示,一切正常,但有时工作线程的状态仍然处于排队状态,并且新任务不会添加到队列中。 就是当没有互联网的时候,我添加一个任务,当互联网出现时,任务开始用完,但由于某种原因,有时不会发生,我不明白为什么任务没有开始,尽管事实上,互联网就在那里,任务也在队列中。 如何确定任务无法启动的原因? 有人有更好的建议吗?

//run task
runOneTimeWorkByType<GetDocumentsWorker>(GET_DOCUMENTS_TAG)

     private inline fun <reified W : Worker> runOneTimeWorkByType(tag: String) {
            val workerInfoList = workManager
                .getWorkInfosByTag(tag)
                .get()

            for (item in workerInfoList) {
                if (item.state == WorkInfo.State.ENQUEUED){
                    return
                }
            }

            val constraints = Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build()

            val workRequest =
                OneTimeWorkRequestBuilder<W>()
                    .setConstraints(constraints)
                    .addTag(tag)
                    .build()

            workManager.enqueue(workRequest)
        }


        class GetDocumentsWorker(ctx: Context, workerParams: WorkerParameters) :
            Worker(ctx, workerParams) {
            @Inject
            lateinit var serviceUtils: ServiceUtils

            init {
                App.appComponent.inject(this)
            }

            override fun doWork(): Result {
                Log.d("workmng", "GetDocumentsWorker: start")
                try {
                    serviceUtils.documentsGet()
                } catch (e: Exception) {
                    Log.d("workmng", "GetDocumentsWorker:  exception", e.cause)
                    return Result.retry()
                }
                Log.d("workmng", "GetDocumentsWorker: end")
                return Result.success()
            }
        }

UPDATE:

我尝试无条件启动任务,但在这种情况下,也没有任何启动,有想法为什么会这样?

fun runGetDocumentsTask() {
        val workRequest =
            OneTimeWorkRequestBuilder<GetDocumentsWorker>()
                .addTag(GET_DOCUMENTS_TAG)
                .build()

        workManager.enqueue(workRequest)
    }

当我取消工作时,一切开始正常工作:workManager.cancelAllWork()

创建worker时,我运行了几个周期性任务,它们会出现问题吗?如果是这样,如何解决?

private var workManager: WorkManager = WorkManager.getInstance(ctx)

    init {
        //workManager.cancelAllWork()
        runSendAllPeriodicTasks()
    }

    private fun runSendAllPeriodicTasks() {
        runOneTimeWorkOnPeriod<SendAllWorker>(15, TimeUnit.MINUTES)
        runOneTimeWorkOnPeriod<FailureFilesResendWorker>(3, TimeUnit.HOURS)
        runOneTimeWorkOnPeriod<GetItemsWorker>(1, TimeUnit.HOURS)
    }

None

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

工人经理:不在队列中开始工作 的相关文章

随机推荐

  • Logstash:如何将文件名添加为字段?

    我使用 Logstash Elasticsearch Kibana 来概览我的 Tomcat 日志文件 对于每个日志条目 我需要知道它来自的文件的名称 我想将其添加为字段 有办法做到吗 我用谷歌搜索了一下 只发现这个问题 https sta
  • 使用 Python Requests 库上传大型 XML 文件

    我正在尝试用 Python 和 requests 库替换curl 借助curl 我可以使用curl T 选项将单个XML 文件上传到REST 服务器 我无法对 requests 库做同样的事情 一个基本场景的工作原理 payload
  • 如何在java中实用地从jar中删除特定文件/文件夹

    如何在 java 中实用地从 jar 中删除特定文件 文件夹 我有一个 jar ABC jar 包含文件 文件夹和另一个 jar 说 child jar 在child jar下我想删除一个特定的文件 我能怎么做 这样我的 ABC jar 结
  • Hibernate Map ID 自动从字段中获取

    我有类似的东西 Entity Table name claim schema test public class Claim implements Serializable Id GeneratedValue strategy Genera
  • 使用 python 获取 Windows 资源管理器中所选文件的路径

    我想在桌面上选择一些文件 然后使用 python 脚本 将通过键盘组合按下启动 获取所有选定文件的路径 我知道如何通过组合键触发脚本 但我的文件路径有问题 任何帮助将不胜感激 我明白pyHook仅读取低级键盘事件 你想做的是不可能用你的方法
  • 如何在 Web 组件中使用子元素

    我正在构建用于教育目的的普通 Web 组件 这是我的自定义复选框 class Checkbox extends HTMLElement constructor super this shadow this attachShadow mode
  • WCF OData 服务和 EF 6 问题 - 无法使用 Odata 服务公开实体

    我将 WCF 数据服务 Odata 与 NET Framework 4 5 1 和 EF 6 1 结合使用 我使用代码优先方法来创建 EF 模型 当我将此 EF 模型 AddProjectModel cs 引用到 WCF OData 服务
  • 在 Eclipse 中创建方法存根的快捷方式

    我认为在 Eclipse 中创建方法存根的一些快捷方式可能会有用 有谁知道该怎么做 Type public method see Java Editor Templates in preferences for more options o
  • 检测 Java 对象是否已被修改?

    假设我有一个标准 Java bean 即它包含的成员是String List HashMap etc 我的问题是 检测此类对象的实例是否已从先前 原始状态进行修改的最简单方法是什么 我想知道这一点的原因是 在以下情况下 我可以确定是否应该更
  • 重新加载 vue-tables-2 (Vuex) 的数据

    Module https github com matfish2 vue tables 2 https github com matfish2 vue tables 2 我正在创建一个 CRUD 应用程序 如何在 vue tables 2
  • 从 PHP 中的分隔字符串中提取浮点数

    我想将一串分隔的维度值转换为浮点数 例如 152 15 x 12 34 x 11mm into 152 15 12 34 and 11 并存储在一个数组中 这样 dim 0 152 15 dim 1 12 34 dim 2 11 我还需要处
  • 在放置新分配的对象时不调用析构函数可以吗?

    假设我有一个固定的内存缓冲区 char buffer And I 使用placement new 在该缓冲区中分配我的结构 struct S std tuple
  • 如果表单数据边界包含在附件中怎么办?

    让我们看下面的例子multipart form data 取自 w3 com http www w3 org TR html401 interact forms html h 17 13 4 2 Content Type multipart
  • 将模板应用于具有属性的子节点

    我想将模板应用于具有指定属性的子节点的节点 并且我很好奇是否可以使用
  • 获取 BQ 公共数据集中的顶级专利国家/地区和代码

    我正在尝试使用分析函数来获取专利申请量排名前 2 的国家 地区 并在这两个排名前 2 的国家 地区中获取排名前 2 的申请类型 例如 答案将如下所示 country code US P US A GB X GB P 这是我用来获取此信息的查
  • Caffe 模型为每个图像提供相同的输出

    我刚刚使用预定义的 prototxt 和 caffemodel 文件在 caffe 中加载了 alexnet 然而 将任何图像发送到模型都会返回与 fc7 层的输出相同的值 这是代码片段 net caffe Net alexnet trai
  • 使元素在 css 缩放后表现相同

    我一直在用 javascript 操作 div 有时我需要让这些 div 适合大小不断变化的容器 实现这一目标的一种方法是使用 css 缩放 缩放的问题在于它只是缩小了元素的图片 系统继续以相同的方式查看元素 因此所有位置等都会变得倾斜 例
  • 包含引用项目的 .config 文件

    而不是从程序集的引用输出中排除文件 https stackoverflow com questions 2011434 preventing referenced assembly pdb and xml files copied to o
  • 如何找到 C++ 中整数类型可以表示的值的范围?

    C 中整数值类型的大小和范围是特定于平台的 大多数 32 位系统上的值可以在以下位置找到 变量 数据类型 C 文档 http www cplusplus com doc tutorial variables html 如何确定特定系统的实际
  • 工人经理:不在队列中开始工作

    我有这样的代码 我需要实现任务队列 如果任务在队列中 那么就不需要添加它 我的实现如图所示 一切正常 但有时工作线程的状态仍然处于排队状态 并且新任务不会添加到队列中 就是当没有互联网的时候 我添加一个任务 当互联网出现时 任务开始用完 但