代码之家  ›  专栏  ›  技术社区  ›  Bruno De Vivo

有没有一种方法可以在不修改foo1()的情况下强制执行foo2()?Swift

  •  0
  • Bruno De Vivo  · 技术社区  · 3 年前

    在不修改foo1()函数的情况下,如何修改以下代码以在1之后打印2?

    func foo1() {
        Task {
            try await Task.sleep(nanoseconds: 1_000_000_000)
            print("1")
        }
    }
    
    func foo2() {
        print("2")
    }
    
    func mainFunc() {
        foo1()
        foo2()
    }
    mainFunc()
    

    编辑 既然有人问我,我更愿意直接在问题中具体说明。 这不是一个真正的问题,这是我为提高对语言的理解而设置的练习。我知道还有其他方法,比如使用完成处理程序(仅举一个例子)。

    这个问题的答案不一定存在,也不一定是肯定的,可能只是不可能采用启动任务并从外部同步强制其行为的函数。

    无论如何,这篇文章可能对计划在Swift中研究并发性的人有所帮助

    0 回复  |  直到 3 年前
        1
  •  0
  •   Scott Thompson    3 年前

    简单的答案是你不能。

    的主体 foo1 创建一个非结构化任务。您没有提供用于监视Task的通道,也没有构建任何机制来通知其完成情况。

    基本上,你已经明确放弃了每一个知道何时 Task 在里面 foo1 开始或完成时。

    推荐文章