Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Memastikan Pelaksanaan Tugasan Berjujukan dan Mengendalikan Kemasukan Semula dalam Operasi Asynchronous?
Penjujukan Tugasan dan Kemasukan Semula: Penyelesaian Terperinci
Pertimbangkan senario berikut:
Untuk menangani isu ini, kami memperkenalkan konsep semula -entrancy, memastikan susunan tugasan dikekalkan walaupun tugasan bersarang dilaksanakan.
Kod Contoh
// AsyncOp class AsyncOp<T> { Task<T> _pending = Task.FromResult(default(T)); public Task<T> CurrentTask { get { return _pending; } } public Task<T> RunAsync(Func<Task<T>> handler, bool useSynchronizationContext = false) { var pending = _pending; Func<Task<T>> wrapper = async () => { // await the prev task var prevResult = await pending; Console.WriteLine($"\nprev task result: {prevResult}"); // start and await the handler return await handler(); }; var task = new Task<Task<T>>(wrapper); var inner = task.Unwrap(); _pending = inner; task.RunSynchronously(useSynchronizationContext ? TaskScheduler.FromCurrentSynchronizationContext() : TaskScheduler.Current); return inner; } }
Output
Test #1... prev task result: 0 this task arg: 1000 prev task result: 1000 this task arg: 900 prev task result: 900 this task arg: 800 Press any key to continue to test #2... prev task result: 800 this task arg: 100 prev task result: 100 this task arg: 200
Dengan penyelesaian ini, output yang diingini dicapai , walaupun semasa kemasukan semula diperkenalkan.
Penyegerakan dan Pembatalan
Kelas AsyncOp boleh dilanjutkan untuk menyokong penyegerakan dan pembatalan dengan menambah mekanisme yang sesuai.
Kesimpulan
Dengan memahami konsep penjujukan tugas dan kemasukan semula, kami telah membangunkan penyelesaian teguh yang mengekalkan susunan tugasan dan menyokong tugasan bersarang. Corak ini amat berguna dalam senario di mana arahan tiba secara tidak segerak dan bergantung pada hasil arahan sebelumnya.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Memastikan Pelaksanaan Tugasan Berjujukan dan Mengendalikan Kemasukan Semula dalam Operasi Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!