Thread C# with Example
See below for a simple example of how to use a Thread to do some time intensive stuff in a background process. public async void ProcessDataAsync() { // Start the time intensive method Thread t = new Thread(TimeintensiveMethod); // Control returns here before TimeintensiveMethod returns Console.WriteLine("You can read this while TimeintensiveMethod is still running."); } private void TimeintensiveMethod() { Console.WriteLine("Start TimeintensiveMethod."); // Do some time intensive calculations... using (StreamReader reader = new StreamReader(@"PATH_TO_SOME_FILE")) { string v = reader.ReadToEnd(); for (int i = 0; i < 10000; i++) v.GetHashCode(); } Console.WriteLine("End TimeintensiveMethod."); } As you can see we can not return a value from our TimeIntensiveMethod because Thread expects a void Method as its parameter. To get a return value from a Thread use either an event or the following: int ret; Thread t= new Thread(() => { Console.WriteLine("Start TimeintensiveMethod."); // Do some time intensive calculations... using (StreamReader reader = new StreamReader(file)) { string s = reader.ReadToEnd(); for (int i = 0; i < 10000; i++) s.GetHashCode(); } Console.WriteLine("End TimeintensiveMethod."); // return something to demonstrate the coolness of await-async ret = new Random().Next(100); }); t.Start(); t.Join(1000); Console.Writeline("Count: " + ret); In C#, a method declared async won't block within a synchronous process, in case of you're using I/O based operations (e.g. web access, working with files, ...). The result of such async marked methods may be awaited via the use of the awaitkeyword.