Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

order of execution of try catch and finally block

Tags:

c#

I am having big confusion with the order of try, catch and finally block execution.

I also want to know when should I use try-catch block and what should I put in the try-catch block? I also want to know if some exception comes in try block then if an action is taken corresponding to try block then which one is executed first catch or finally (which is always to be executed)? After the execution of these two does control return to try block or it leave it?

like image 313
NoviceToDotNet Avatar asked Nov 16 '10 03:11

NoviceToDotNet


2 Answers

If you have (note: this is not valid C#, see below for a valid example):

try {
   // ... some code: A
} catch(...) {
   // ... exception code: B
} finally {
   // finally code: C
}

Code A is going to be executed. If all goes well (i.e. no exceptions get thrown while A is executing), it is going to go to finally, so code C is going to be executed. If an exception is thrown while A is executed, then it will go to B and then finally to C.

As an example, here's a valid C# code block from http://msdn.microsoft.com/en-us/library/dszsf989.aspx:

public class EHClass
{
    void ReadFile(int index)
    {
        // To run this code, substitute a valid path from your local machine
        string path = @"c:\users\public\test.txt";
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        char[] buffer = new char[10];
        try
        {
            file.ReadBlock(buffer, index, buffer.Length);
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
        }
        finally
        {
            if (file != null)
            {
                file.Close();
            }
        }
        // Do something with buffer...
    }
}

The reason to use try/catch/finally is to prevent your program to fail if there is an error in some code (A in the above example). If there is a problem, you can use catch part to catch the problem and do something useful, such as inform the user, log the exception to a log file, try again or try something different that you suppose might work instead of what you tried originally.

finally is used to ensure that some cleanup is performed. E.g. in A you might try to open a file and read it. If opening succeeds, but read fails, you will have an open file dangling. What you would like in that case is to have it closed, which you would do in finally block - this block always gets executed, guaranteeing the closing of the file.

Take a look here for more info:

  • http://msdn.microsoft.com/en-us/library/0yd65esw.aspx
  • http://www.c-sharpcorner.com/UploadFile/puranindia/75/Default.aspx
like image 133
icyrock.com Avatar answered Sep 17 '22 14:09

icyrock.com


A try ... catch block is used to catch exceptions. In the try block you put the code that you expect may raise an exception.

If no exception occurs then the code in the try block completes as expected. If there's a finally block then that will execute next.

If an exception does occur then execution jumps to the start of the first matching catch block. Once that code is complete the finally block (if it exists) is executed. Execution does not return to the try block.

like image 34
Andrew Cooper Avatar answered Sep 20 '22 14:09

Andrew Cooper