【问题标题】:Task management任务管理
【发布时间】:2021-04-09 07:19:06
【问题描述】:

关于任务的几个问题:

  1. 在所有示例(Toit 中的任务 部分)中,任务都是在 app 的 main 部分中“创建”的。这是否意味着不能在 class 中创建任务?我试过这个并得到一个编译错误:
    class Receiver :
      task :: receive
      receive :
        while true :
          sleep --ms=100
          print "inside thread"
    
    ./web.toit:51:8: error: Unexpected token: ::
      task :: receive
           ^~
    ./web.toit:51:3: error: Missing body
      task :: receive
      ^~~~
    Compilation failed.
  1. 从示例中可以看出,生命周期 任务与应用程序本身的生命周期 相吻合。无论如何,直到我找到机会创建一个任务,运行它,应用暂停/暂停/冻结恢复、取消/删除任务等。这些机会是否存在?

【问题讨论】:

    标签: task toit


    【解决方案1】:

    您可以在类内创建任务,但您需要在方法内或作为字段初始化程序的一部分进行。但请注意,字段初始化器无法访问this,因此没有this 的方法。

    假设您想要一个包含任务的接收器类中的字段。然后你会想写:

    class Receiver:
      task_ := null
    
      constructor:
        task_ = task:: receive
    
      receive:
        while true:
          sleep --ms=100
          print "inside thread"
    

    您可以通过调用cancel 来取消任务。一旦达到屈服点,它就会停止。

    目前无法从外部暂停/恢复任务。不过,鉴于您的反馈,我们正在讨论向其中添加此功能的可能性。

    现在您可能只需要使用同步原语,例如信号量。您可以将其添加到循环的开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2015-05-16
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多