Pakej context
Go menyediakan mekanisme yang kuat untuk menguruskan pembatalan dan tamat masa dalam program serentak. Adalah penting untuk menulis kod yang mantap dan cekap, terutamanya apabila berurusan dengan operasi jangka panjang. Antara muka context.Context
mewakili tarikh akhir, isyarat pembatalan, dan nilai-nilai scoped yang lain. Anda boleh membuat konteks dengan tarikh akhir menggunakan context.WithTimeout
atau isyarat pembatalan menggunakan context.WithCancel
. Fungsi -fungsi ini mengembalikan context.Context
baru.context dan context.CancelFunc
. CancelFunc
membolehkan anda membatalkan konteks secara manual, mencetuskan isyarat pembatalan di hilir. Apabila konteks dibatalkan, semua operasi menggunakan konteks itu harus ditamatkan dengan anggun.
Mari kita gambarkan dengan contoh:
<🎝🎝🎝> Dalam contoh ini, longRunningTask
terus berjalan sehingga konteks dibatalkan. context.WithTimeout
mencipta konteks yang akan dibatalkan selepas 5 saat. defer cancel()
memastikan bahawa konteks dibatalkan walaupun terdapat kesilapan. Saluran <-ctx.Done()
menunggu konteks dibatalkan, yang membolehkan fungsi utama keluar dengan anggun.
Pembatalan konteks yang berkesan dalam program GO serentak bergantung pada penyebaran dan pengendalian context.Context
yang betul. Berikut adalah beberapa amalan terbaik:
ctx.Done()
dalam goroutine anda. Saluran ini ditutup apabila konteks dibatalkan. Gunakan pernyataan select
untuk mengendalikan kedua -dua pembatalan dan acara lain serentak.ctx.Done()
), melakukan operasi pembersihan seperti penutupan fail, melepaskan sumber, dan memastikan konsistensi data. Elakkan panik; Sebaliknya, mengendalikan kesilapan dengan anggun.ctx.Done()
secara berkala untuk mengelakkan goroutine daripada menggantung.Penyebaran konteks memastikan bahawa semua bahagian program serentak anda menyedari masa tamat atau pembatalan keseluruhan. Ini dilakukan dengan lulus konteks kepada setiap goroutine yang perlu menyedarinya. Konteks harus menjadi hujah pertama kepada sebarang fungsi yang melakukan operasi yang berpotensi lama.
Contoh Menggambarkan Penyebaran Konteks:
<🎝🎝🎝> Contoh ini menunjukkan bagaimana konteksnya diluluskan kepada setiap goroutine worker
. Setiap pekerja memeriksa ctx.Done()
dan keluar dengan anggun apabila konteks dibatalkan.
Beberapa perangkap biasa boleh timbul apabila menggunakan context.WithTimeout
dan context.WithCancel
:
Dengan mengikuti amalan terbaik ini dan mengelakkan perangkap ini, anda boleh menggunakan pakej context
GO dengan berkesan untuk membuat program serentak yang mantap, cekap, dan boleh dibatalkan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan konteks dengan berkesan untuk pembatalan dan tamat masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!