Có cách nào an toàn để thay đổi mức độ ưu tiên của NSOperation đã được đưa vào NSOperationQueue không? Nếu hoạt động chưa bắt đầu thì không có vấn đề gì, nhưng nếu nó đã được thực hiện thì tôi nhận được một NSInvalidArgumentException.Cách an toàn để thay đổi mức độ ưu tiên của NSOperation
Trả lời
Bạn không được phép thay đổi NSOperation sau khi đã được đặt hàng. Theo Threading Programming Guide của Apple:
Chú ý: Bạn không bao giờ nên sửa đổi một đối tượng hoạt động sau khi nó đã được thêm vào một hàng đợi. Trong khi đợi trong hàng đợi , thao tác có thể thực hiện tại bất kỳ lúc nào. Thay đổi trạng thái của nó trong khi nó đang thực hiện có thể có tác động bất lợi . Bạn có thể sử dụng các phương thức của đối tượng hoạt động để xác định xem hoạt động có đang chạy hay không, đợi đến chạy hoặc đã hoàn tất.
Liên kết được cập nhật: http://developer.apple.com/library/mac/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#//apple_ref/doc/uid/TP40008091 -CH101-SW38 –
@MichaelBaltaks - Cảm ơn, đã cập nhật. –
Trên docs không có cảnh báo về việc không thay đổi mức độ ưu tiên sau khi bắt đầu thao tác và không đề cập đến ngoại lệ đã nêu.
Trong thực tế, việc thay đổi mức ưu tiên của thao tác đang chạy chỉ đơn giản là không có hiệu lực. Có thể bạn đang làm sai điều gì đó ở nơi khác?
Theo Concurrency Programming Guide chúng ta sẽ có thể thay đổi các ưu tiên
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.
- 1. Thay đổi mức độ ưu tiên trong Log4j
- 2. Làm cách nào để thay đổi mức độ ưu tiên của một quy trình?
- 3. Cách đặt Mức độ ưu tiên của IntentService trong Android
- 4. thay đổi mức độ ưu tiên của chuỗi gốc trên Android bằng c/C++
- 5. Thay đổi mức độ ưu tiên của chuỗi tăng trong Windows
- 6. Làm cách nào để thay đổi mức ưu tiên của thư trong MSMQ?
- 7. C# có thể thay đổi mức độ ưu tiên của việc mua khóa không?
- 8. Hàng đợi ưu tiên an toàn cho Delphi?
- 9. Cách sửa đổi mức độ ưu tiên của hàng đợi GCD tùy chỉnh?
- 10. Thư PHP() - Cách đặt mức độ ưu tiên?
- 11. Thay đổi mức ưu tiên của chuỗi không có hiệu lực
- 12. Tôi có thể thay đổi mức ưu tiên của một quy trình trong Erlang không?
- 13. Mức độ ưu tiên của chủ đề và Độ chính xác của chủ đề
- 14. Cài đặt mức độ ưu tiên (ưu tiên) không có hiệu lực trên Linux
- 15. Làm cách nào để khởi chạy từ Eclipse với mức độ ưu tiên Thấp trong Windows?
- 16. Mức độ an toàn khi sử dụng Maven?
- 17. Mã không an toàn để thay đổi độ dài (do đột biến!) Của đối tượng String?
- 18. ưu tiên quá trình thay đổi trong android
- 19. Hàng đợi ưu tiên có thể thay đổi đồng thời
- 20. Độ an toàn của chuỗi quá nhiều?
- 21. Làm cách nào để khởi chạy quy trình có mức độ ưu tiên thấp? C#
- 22. Hàng đợi ưu tiên có thể theo dõi chuỗi an toàn được đệm?
- 23. Thay đổi Ưu tiên JavaQueue thành Max PQ
- 24. Linux & C: Cách đặt mức độ ưu tiên đọc tệp trong chương trình đa tiến trình?
- 25. Có cách nào để đặt mức độ ưu tiên của chuỗi nền được sử dụng bởi một SwingWorker không?
- 26. Tôi có thể mong đợi mức độ an toàn của luồng nào từ System.Net.Security.SslStream?
- 27. Thay đổi ưu tiên luồng để làm cho chương trình và máy tính của tôi phản hồi nhanh hơn
- 28. Mức độ ưu tiên trong cách giải quyết lựa chọn Go
- 29. Chạy tác vụ ở chế độ nền với mức ưu tiên CPU thấp hơn
- 30. Cách đa nền tảng để thay đổi ưu tiên quá trình java
Bạn có thể cho chúng ta thấy dấu vết ngăn xếp và nội dung của các ngoại lệ? Có một chút khó khăn để chẩn đoán tại thời điểm này –