Anda dapat menerapkan perilaku "seperti batal" dengan cara ini:
Anda menjalankan kueri pada utas terpisah, yang terus berjalan terlepas dari apakah batas waktu terjadi atau tidak. Batas waktu terjadi pada utas utama, dan menetapkan variabel ke "1" yang menandai bahwa itu terjadi. Kemudian Anda melakukan apa pun yang ingin Anda lakukan di utas utama Anda.
Utas kueri, setelah kueri selesai, memeriksa apakah batas waktu telah terjadi. Jika belum, ia melakukan sisa pekerjaan yang perlu dilakukan. Jika HAS, itu hanya membuka kunci tabel yang baru saja dikunci.
Saya tahu kedengarannya agak boros, tetapi periode penguncian pada dasarnya harus instan, dan Anda mendapatkan hasil yang sedekat mungkin dengan yang Anda inginkan.