我的应用程序必须在云数据库和核心数据之间进行大量同步,这种情况会发生在各种方法中。我使用简单的后台线程来做到这一点:
dispatch_queue_t backgroundThread = dispatch_queue_create("background thread", NULL);
dispatch_async(backgroundThread, ^{ ...
但是,如果我在应用程序中执行的操作太快,则可能会同时执行不同的同步任务,这可能会导致意外结果。
因此,我想在一个线程上连续执行所有同步任务。每当我需要执行同步任务时,我想将它分派给专用线程,在该线程完成所有先前提交的任务之前不要执行。我应该如何管理?具体地说...
我无法找到直接解决这种情况的答案。这一个(Using a single shared background thread for iOS data processing?)接近了,但回避了。
感谢您的时间。
答案 0 :(得分:3)
通过如下静态函数访问队列:
static dispatch_queue_t my_serial_queue() {
static dispatch_queue_t s_serial_queue;
static dispatch_once_t s_done;
dispatch_once(&s_done, ^{s_serial_queue = dispatch_queue_create("com.app.my_queue_name", DISPATCH_QUEUE_SERIAL);});
return s_serial_queue;
}
然后像这样使用它......
dispatch_sync(my_serial_queue(), ^{
//do something here
});