2009-07-18 8 views
5

की प्राथमिकता को बदलने का सुरक्षित तरीका क्या एनएसओपेरेशन क्यूयू में पहले से ही एनएसओपरेशन की प्राथमिकता को बदलने का एक सुरक्षित तरीका है? यदि ऑपरेशन अभी तक शुरू नहीं हुआ है, तो कोई समस्या नहीं है, लेकिन यदि यह पहले ही निष्पादित हो रहा है तो मुझे एनएसआईएनवालिडअर्ग्यूमेंट अपवाद प्राप्त होता है।एनएसओपरेशन

+1

आप हमें स्टैक ट्रेस और अपवाद की सामग्री को दिखा सकते हैं बदलने में सक्षम होना चाहिए? –

उत्तर

11

आपको एनएसओपरेशन को एक बार निकालने के बाद बदलना नहीं है। एप्पल के Threading Programming Guide के अनुसार:

महत्वपूर्ण: आप एक आपरेशन वस्तु को संशोधित नहीं किया जाना चाहिए के बाद यह किया गया है कतार में रख दिया। कतार में प्रतीक्षा करते समय, ऑपरेशन किसी भी समय पर निष्पादित हो सकता है। निष्पादित होने पर इसकी स्थिति बदलना प्रतिकूल प्रभाव हो सकता है। ऑपरेशन ऑब्जेक्ट के तरीकों का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि ऑपरेशन चल रहा है, रन, या पहले से समाप्त हो गया है।

+0

पल में निदान करने के लिए थोड़ा मुश्किल है अपडेटेड लिंक: http://developer.apple.com/library/mac/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#//apple_ref/doc/uid/TP40008091 -CH101-SW38 –

+0

@ माइकलबाल्टक्स - धन्यवाद, अपडेट किया गया। –

0

docs पर ऑपरेशन शुरू होने के बाद प्राथमिकता को बदलने के बारे में कोई चेतावनी नहीं है और उठाए गए अपवादों के बारे में कोई उल्लेख नहीं है।

वास्तव में एक चल रहे ऑपरेशन की प्राथमिकता को बदलने से इसका कोई प्रभाव नहीं पड़ता है। शायद आप कहीं और गलत कर रहे हैं?

1

Concurrency Programming Guide के अनुसार हम प्राथमिकता

For operations added to a queue, execution order is determined first by the 
readiness of the queued operations and then by their relative priority. 
Readiness is determined by an operation’s dependencies on other operations, 
but the priority level is an attribute of the operation object itself. 
By default, all new operation objects have a “normal” priority, but you 
can increase or decrease that priority as needed by calling the object’s 
setQueuePriority: method. 
संबंधित मुद्दे