मैं के साथ बनाई गई एक सीरियल प्रेषण कतार है कॉलिंग थ्रेड पर लौटें।dispatch_async बनाम dispatch_sync निष्पादन आदेश
- (void)addObjectToQueue:(id)object
{
dispatch_async(serialQueue, ^{
// process object and add to queue
});
}
- (BOOL)isObjectInQueue:(id)object
{
__block BOOL returnValue = NO;
dispatch_sync(serialQueue, ^{
// work out return value
});
return returnValue;
}
अगर मैं addObjectToQueue फोन: विधि, तो तुरंत isObjectInQueue फोन: विधि, वे उसी क्रम में क्रियान्वित किया जा करने की गारंटी, या/isObjectInQueue पहले निष्पादित कर सकता है कर रहे हैं?
दूसरे शब्दों में, dispatch_async dispatch_sync (तुरंत ब्लॉक को शेड्यूल करना) के समान ही करता है सिवाय इसके कि यह कॉलिंग थ्रेड को अवरुद्ध नहीं करता है?
मैंने दोनों तरीकों से उत्तर के साथ समान प्रश्न देखे हैं, इसलिए मैं एक निश्चित उत्तर की तलाश में हूं, जिसे ऐप्पल दस्तावेज के साथ अधिमानतः समर्थित किया गया है।
"अगर मैं addObjectToQueue: विधि को कॉल करता हूं, तो तुरंत isObjectInQueue: विधि को कॉल करें, क्या वे उसी क्रम में निष्पादित होने की गारंटी देते हैं, या पहले ऑब्जेक्टइन्यूयूयू पहले निष्पादित करेगा?" यह पूछकर आप शायद मतलब "क्या हम कतार में जोड़े जाने से पहले ऑब्जेक्ट के लिए पूछ सकते हैं?"। क्योंकि, जाहिर है, 2 विधियों को क्रम में चलाने के लिए कहा जाता है यदि उन्हें एक ही धागे पर बुलाया जाता है। – krafter