Rumah > Artikel > pembangunan bahagian belakang > Guna semula konteks.WithTimeout dalam fungsi kelewatan
Menggunakan semula konteks.WithTimeout dalam fungsi kelewatan ialah cara yang berkesan untuk menyediakan kawalan dan fleksibiliti yang lebih baik apabila menangani operasi tamat masa. Dengan menggunakan fungsi context.WithTimeout yang disediakan oleh editor PHP Youzi, anda boleh menetapkan tamat masa semasa pelaksanaan fungsi Setelah masa yang ditetapkan melebihi, fungsi akan keluar secara automatik dan mengembalikan mesej ralat. Kaedah ini boleh mengelakkan penyekatan jangka panjang fungsi dan meningkatkan kestabilan dan tindak balas program. Pada masa yang sama, dengan menggunakan semula konteks.DenganHabis Masa dalam fungsi kelewatan, kawalan tamat masa bagi fungsi yang berbeza juga boleh dicapai, menjadikan kod lebih ringkas dan lebih mudah untuk diselenggara.
Coretan kod berikut (dikurangkan untuk ringkas) dari catatan blog go quickstart untuk mongodb mencipta fungsi context.withtimeout
,并将其重用于延迟的 disconnect
apabila menyambung ke pangkalan data, yang saya rasa bermasalah.
func main() { client, _ := mongo.newclient(options.client().applyuri("<atlas_uri_here>")) ctx, _ := context.withtimeout(context.background(), 10*time.second) _ = client.connect(ctx) defer client.disconnect(ctx) }
Fikiran saya-
context.withtimeout
Tetapkan tarikh akhir dalam masa unix pada penciptaan.
Jadi masuk akal untuk menghantarnya kepada connect
kerana kami ingin membatalkan proses mewujudkan sambungan apabila had masa (iaitu masa unix terbitan) melebihi.
Sekarang, tambah logik ctx
传递给延迟的 disconnect
(很可能在将来稍后调用)将导致 ctx
的时间成为过去。意思是,当函数开始执行时它就已经过期了。这不是预期的结果,并且破坏了引用 disconnect
yang sama pada dokumen -
If the context expires via cancellation, deadline, or timeout before the in use connections have returned, the in use connections will be closed, resulting in the failure of any in flight read or write operations.
Sila beritahu saya jika dan bagaimana saya salah dan/atau kehilangan sesuatu.
Pemahaman anda betul.
sudah cukup dalam contoh kerana contoh hanya menyambung ke pangkalan data, melakukan beberapa contoh operasi (seperti menyenaraikan pangkalan data) dan kemudian main()
tamat, jadi menjalankan putus sambungan yang tertunda dengan konteks yang sama tidak akan menyebabkan sebarang masalah (contoh akan/ harus berfungsi dengan baik dalam masa 10 saat).
Dalam aplikasi "dunia nyata" ini pastinya tidak berlaku. Jadi anda mungkin tidak akan menggunakan konteks yang sama untuk menyambung dan memutuskan sambungan (melainkan konteks itu tidak tamat masa).
Atas ialah kandungan terperinci Guna semula konteks.WithTimeout dalam fungsi kelewatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!