Saya memiliki aplikasi kecil yang perlu menguji string koneksi SQL untuk sejumlah koneksi (masing-masing dilakukan satu per satu). Untuk melakukan ini saya mengatur ConnectionTimeout = 5
sementara untuk menghindari menunggu lama jika koneksi tidak valid dan ConnectionTimeout = 0
(tunggu selamanya), katakanlah.
Untuk menghindari UI hang saat kami mencoba Open()
koneksi yang buruk (bahkan dengan ConnectionTimeout = 5
waktu menunggu SqlException
bisa mencapai dua puluh detik), saya ingin menjalankan pengujian pada thread terpisah menggunakan Task Parallel Library (TPL). Jadi saya spin-off thread baru saya seperti:
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
Masalahnya adalah ini masih mengunci UI (jelas), karena menunggu hasilnya sebelum kembali ke pemanggil. Bagaimana cara mengizinkan kode untuk mengembalikan kontrol ke UI (membebaskan GUI) sambil mendapatkan hasil akhir dari Task
asinkron?
Selain itu, dari dalam Task
dapatkah saya melakukan MessageBox.Show("Some message")
secara sah? Ini tidak berfungsi untuk BackgroundWorkers
dan thread gabungan ini adalah thread latar belakang secara default; namun sepertinya hal itu tidak menjadi masalah. Terima kasih atas waktunya.