Throw exception between Monitor.Enter and Montor.Exit : Monitor : Thread C# Examples


C# Examples » Thread » Monitor »

 

Throw exception between Monitor.Enter and Montor.Exit









    
using  System;
using  System.Threading;
      
class  Database
{
        public  void  SaveData(string  text)
        {
                Console.WriteLine("[SaveData]  Started");
      
                Monitor.Enter(this);
                Console.WriteLine("[SaveData]  Working");
      
                throw  new  Exception("ERROR!");
      
                for  (int  i  =  0;  i  <  50;  i++)
                {
                        Thread.Sleep(100);
                        Console.Write(text);
                }
                Monitor.Exit(this);
      
                Console.WriteLine("\n[SaveData]  Ended");
        }
}
      
class  ThreadMonitor3App
{
        public  static  Database  db  =  new  Database();
      
        public  static  void  WorkerThreadMethod1()
        {
                Console.WriteLine("[WorkerThreadMethod1]  Started");
      
                Console.WriteLine("[WorkerThreadMethod1]  "  +
                        "Calling  Database.SaveData");
      
                try
                {
                        db.SaveData("x");
                }
                catch{}
      
                Console.WriteLine("[WorkerThreadMethod1]  Finished");
        }
      
        public  static  void  WorkerThreadMethod2()
        {
                Console.WriteLine("[WorkerThreadMethod2]  Started");
      
                Console.WriteLine("[WorkerThreadMethod2]  "  +
                        "Calling  Database.SaveData");
                try
                {
                        db.SaveData("o");
                }
                catch{}
      
                Console.WriteLine("[WorkerThreadMethod2]  Finished");
        }
      
        public  static  void  Main()
        {
                ThreadStart  worker1  =  new  ThreadStart(WorkerThreadMethod1);
                ThreadStart  worker2  =  new  ThreadStart(WorkerThreadMethod2);
      
                Thread  t1  =  new  Thread(worker1);
                Thread  t2  =  new  Thread(worker2);
      
                t1.Start();
                t2.Start();
      
                Console.ReadLine();
        }
}
    
   
  
   




HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Thread
» Monitor