using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Main(): Started.");
Console.WriteLine("Main(): Calling ComplexMethod...");
var complexMethodTask = Task.Run(() => ComplexMethod());
Console.WriteLine("Main(): Proceeding...");
Thread.Sleep(3500);
Console.WriteLine("Main(): Waiting for ComplexMethod to finish...");
complexMethodTask.Wait();
Console.WriteLine("Main(): Finished.");
}
public static void ComplexMethod()
{
Console.WriteLine("ComplexMethod(): Started.");
Thread.Sleep(1000);
Console.WriteLine("ComplexMethod(): Calling WriteToFile method...");
var writeTask1 = Task.Run(() => WriteToFile());
Console.WriteLine("ComplexMethod(): Doing some other things...");
Thread.Sleep(2500);
Console.WriteLine("ComplexMethod(): Calling WriteToFile method...");
var writeTask2 = Task.Run(() => WriteToFile());
Console.WriteLine("ComplexMethod(): Doing some other things...");
Thread.Sleep(2500);
Console.WriteLine("ComplextMethod(): Waiting for both WriteToFile methods to finish...");
Task.WaitAll(writeTask1, writeTask2);
Console.WriteLine("ComplexMethod(): Finished.");
}
public static void WriteToFile()
{
Console.WriteLine("WriteToFile(): Started.");
Thread.Sleep(500);
Console.WriteLine("WriteToFile(): Writing to a file is taking a long time...");
Thread.Sleep(4000);
Console.WriteLine("WriteToFile(): Finished.");
}
}