হ্যাঁ. সিরিয়াল সারি ব্যবহার করে ক্রিয়াকলাপের ক্রমিক কার্য সম্পাদন নিশ্চিত করে। পার্থক্যটি হ'ল dispatch_sync
কেবলমাত্র ব্লকটি শেষ dispatch_async
হওয়ার পরে ফিরে আসে যখন এটি সারিটিতে যুক্ত হওয়ার পরেও ফিরে আসে এবং শেষ নাও হতে পারে।
এই কোডের জন্য
dispatch_async(_serialQueue, ^{ printf("1"); });
printf("2");
dispatch_async(_serialQueue, ^{ printf("3"); });
printf("4");
এটা তোলে প্রিন্ট পারে 2413
বা 2143
বা 1234
কিন্তু 1
সবসময় সামনে3
এই কোডের জন্য
dispatch_sync(_serialQueue, ^{ printf("1"); });
printf("2");
dispatch_sync(_serialQueue, ^{ printf("3"); });
printf("4");
এটি সর্বদা মুদ্রণ 1234
দ্রষ্টব্য: প্রথম কোডের জন্য, এটি মুদ্রণ করবে না1324
। কারণ printf("3")
হল প্রেষিত পর printf("2")
মৃত্যুদন্ড কার্যকর করা হয়। এবং কোনও কাজ প্রেরণের পরে কেবল কার্যকর করা যেতে পারে ।
কার্য সম্পাদনের সময় কোনও পরিবর্তন করে না। এই কোডটি সর্বদা মুদ্রণ করে12
dispatch_async(_serialQueue, ^{ sleep(1000);printf("1"); });
dispatch_async(_serialQueue, ^{ printf("2"); });
যা হতে পারে তা হ'ল
- থ্রেড 1: সিরিয়াল কাতারে সময় সাশ্রয়ী টাস্ক (টাস্ক 1) প্রেরণ_কেন্দ্রিক করুন
- থ্রেড 2: টাস্ক 1 চালানো শুরু করুন
- থ্রেড 1: সিরিয়াল কাতারে আরেকটি কাজ (টাস্ক 2) প্রেরণ করুন_পরিচালনা করুন
- থ্রেড 2: টাস্ক 1 সমাপ্ত। কার্য সম্পাদন 2 শুরু করুন
- থ্রেড 2: টাস্ক 2 সমাপ্ত।
এবং আপনি সবসময় দেখতে পাবেন 12