向 macOS Grand Central Dispatch App 中的信号量发送延迟的 semaphore_signal 是一种好习惯吗?

Is it good practice to send a delayed semaphore_signal to a semaphore in a macOS Grand Central Dispatch App?

我在 macOS Objective-C 应用程序中使用信号量和 GCD。我有这种常见情况:

dispatch_semaphore_t fd_sema = dispatch_semaphore_create(0);

dispatch_async(dispatch_get_main_queue(), ^{

        // Perform some activity
        // But can potentially never complete

        dispatch_semaphore_signal(fd_sema);
});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        dispatch_semaphore_signal(fd_sema);
});

dispatch_semaphore_wait(fd_sema, DISPATCH_TIME_FOREVER);

基本上,我在这里试图获得操作超时。鉴于 dispatch_semaphore_wait 的参数只能是现在或永远,我正在使用 dispatch_after 块来实现超时。您认为这是好的做法还是会导致问题和崩溃?感谢您的帮助。

您从哪里得知 dispatch_semaphore_wait() 的超时只能是现在或永远?那是不正确的。您可以像使用 dispatch_after() 一样传递 dispatch_time() 的结果。因此,没有必要自己实现超时。