ios - 循环延迟的同步问题

标签 ios swift synchronization

我试图延迟循环内的特定线程,但我没有得到我想要的行为。我希望 1B 仅在 1A 完成后运行,而 2A 在单独的线程上并行运行。我的实现先运行 1A,然后运行 ​​1B,然后运行 ​​2A。知道如何解决这个问题吗?

实现

override func viewDidLoad() {
    super.viewDidLoad()

    // 1
    DispatchQueue.main.async {
        self.loopManager(printable: "1A") // 1A
        self.loopManager(printable: "1B") // 1B
    }

    // 2
    DispatchQueue.main.async {
        self.loopManager(printable: "2A") // 2A
    }
}

func loopManager(printable: String) {
    for i in 0...3 {
        doABC(printable: String(i) + ", " + printable)
        sleep(1)
    }
}

func doABC(printable: String) {
    print(printable)
}

日志

0, 1A
1, 1A
2, 1A
3, 1A
0, 1B
1, 1B
2, 1B
3, 1B
0, 2A
1, 2A
2, 2A
3, 2A

最佳答案

您正在同一个线程中运行您的代码。您需要在另一个线程中运行 2A

DispatchQueue.global().async {
    self.loopManager(printable: "2A") // 2A
}

输出样本:

0, 1A
0, 2A
1, 2A
1, 1A
2, 1A
2, 2A
3, 1A
3, 2A
0, 1B
1, 1B
2, 1B
3, 1B

关于ios - 循环延迟的同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527755/

相关文章:

ios - 无法检索 friend 的个人资料图片并将其显示在 tableview iOS Objective-C 中

swift - 小费计算器 - Swift

android - 在 Android 应用程序中与服务器同步

java - 如何使用 Java 检测同步冲突

ios - 有趣的重叠 UIScrollView 难题

ios - UIButton字体不流畅

objective-c - 调用 didSelectRowAtIndexPath 时激活单元格的附属 View (UISwitch)

ios - UITextView.attributedText,如何设置numberOflines和lineBreakMode?

ios - 使用 SwiftyDropbox 将图片上传到 Dropbox

Java 并发与原子类