Bagikan melalui


Cara menjalankan kode pembersihan menggunakan finally

Tujuan dari pernyataan finally adalah untuk memastikan bahwa pembersihan objek yang diperlukan, biasanya objek yang memegang sumber daya eksternal, segera dilakukan, bahkan jika pengecualian dilemparkan. Salah satu contoh pembersihan tersebut adalah memanggil Close pada FileStream segera setelah digunakan alih-alih menunggu objek menjadi sampah yang dikumpulkan oleh runtime bahasa umum, seperti berikut ini:

static void CodeWithoutCleanup()
{
    FileStream? file = null;
    FileInfo fileInfo = new FileInfo("./file.txt");

    file = fileInfo.OpenWrite();
    file.WriteByte(0xF);

    file.Close();
}

Contoh

Untuk mengubah kode sebelumnya menjadi pernyataan try-catch-finally, kode pembersihan dipisahkan dari kode kerja, seperti berikut ini.

static void CodeWithCleanup()
{
    FileStream? file = null;
    FileInfo? fileInfo = null;

    try
    {
        fileInfo = new FileInfo("./file.txt");

        file = fileInfo.OpenWrite();
        file.WriteByte(0xF);
    }
    catch (UnauthorizedAccessException e)
    {
        Console.WriteLine(e.Message);
    }
    finally
    {
        file?.Close();
    }
}

Karena pengecualian dapat terjadi kapan saja dalam blok try sebelum panggilan OpenWrite(), atau panggilan OpenWrite() itu sendiri bisa saja gagal, kami tidak menjamin bahwa file terbuka ketika kami mencoba menutupnya. Blok finally menambahkan pemeriksaan untuk memastikan bahwa objek FileStream bukanlah null sebelum Anda memanggil metode Close. Tanpa pemeriksaan null, blok finally dapat melempar NullReferenceException-nya sendiri, tetapi melemparkan pengecualian dalam blok finally harus dihindari jika memungkinkan.

Koneksi database adalah kandidat lain yang baik untuk ditutup dalam blok finally. Karena jumlah koneksi yang diizinkan ke server database terkadang terbatas, Anda harus menutup koneksi database sesegera mungkin. Jika pengecualian dilemparkan sebelum Anda dapat menutup koneksi Anda, menggunakan blok finally lebih baik daripada menunggu pengumpulan sampah.

Lihat juga