Tomas
Tomas

Reputation: 18097

Access static method from static class from different threads. Is it safe?

I have monitoring a folder using FileSystemWatcher to delete specified files from it. When FileSystemWatcher event is raised I create new thread to delete file. Is my code thread safe? I am not sure about static Log method which is accessed from Threads.

FileSystemWatcher.EventRaised....
{
   var delFolder = Path.GetDirectoryName(e.FullPath);
   var t = new Thread(DeleteThread.Do);
   t.Start(delFolder);
}
/*..code skip...*/



 static class DeleteThread
        {

            public static void Do(object delFolder)
            {
                try
                {
                    Log("Deleting folder {0}", (string)delFolder);
                    Directory.Delete((string)delFolder, true);
                }
                catch (Exception e)
                {
                    Log("Error deleting folder {0}. {1}", (string)delFolder, e.Message);
                }
            }
        }

        private static void Log(string text, string text1 = "", string text2 = "", string text3 = "")
        {
            Console.WriteLine(text, text1, text2, text3);
        }

Upvotes: 0

Views: 396

Answers (2)

DiVan
DiVan

Reputation: 381

Your question is basically, whether or not

Console.WriteLine("")

is thread-safe or not? The answer is here: Calling Console.WriteLine from multiple threads (YES)

It could cause you some race conditions, however. Another thing, you could get multiple

   Directory.Delete()

calls in case your event will fire rapidly, causing many exceptions.

Upvotes: 1

Daniel Hilgarth
Daniel Hilgarth

Reputation: 174289

Your code is thread safe.
But this hasn't much to do with static methods, but with what the methods do.
Your Log method only calls Console.WriteLine which itself is thread safe according to the MSDN.

In short: Making a method static doesn't make it thread safe automatically.
But: Most static methods in the .NET Framework are implemented thread safe.

Upvotes: 2

Related Questions