Home >Backend Development >C++ >Does the C# `finally` Block Always Execute?

Does the C# `finally` Block Always Execute?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 07:54:12518browse

Does the C# `finally` Block Always Execute?

Does the C# "finally" Block Always Execute?

Consider the following code snippet:

public void DoesThisExecute()
{
    string ext = "xlsx";
    string message = string.Empty;
    try
    {
        switch (ext)
        {
            case "xls": message = "Great choice!"; break;
            case "csv": message = "Better choice!"; break;
            case "exe": message = "Do not try to break me!"; break;
            default:
                message = "You will not win!";
                return;
        }
    }
    catch (Exception)
    {
        // Handle an exception.
    }
    finally
    {
        MessageBox.Show(message);
    }
}

In this example, the "finally" block contains a call to MessageBox.Show(message).

Does this "finally" block always execute?

No, it does not. The "finally" block will only execute if the application is still running at the time the try/catch block exits. Specifically, it will not execute if:

  • An exception is thrown and results in a FastFail exception.
  • The application crashes due to an unhandled exception.
  • The application is manually terminated through a command such as "kill process."

It's important to note that the "finally" block is designed to ensure execution of crucial actions, such as resource cleanup or logging information, even when an exception occurs. However, it's crucial to be aware that it may not execute in all scenarios, particularly catastrophic application failures.

The above is the detailed content of Does the C# `finally` Block Always Execute?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn