using System.Collections.Generic;
using System.Threading.Tasks;
namespace LISTING_1_47_Deadlocked_tasks
static object lock1 = new object();
static object lock2 = new object();
Console.WriteLine("Method 1 got lock 1");
Console.WriteLine("Method 1 waiting for lock 2");
Console.WriteLine("Method 1 got lock 2");
Console.WriteLine("Method 1 released lock 2");
Console.WriteLine("Method 1 released lock 1");
Console.WriteLine("Method 2 got lock 2");
Console.WriteLine("Method 2 waiting for lock 1");
Console.WriteLine("Method 2 got lock 1");
Console.WriteLine("Method 2 released lock 1");
Console.WriteLine("Method 2 released lock 2");
public static void Main(string[] args)
Task t1 = Task.Run(() => Method1());
Task t2 = Task.Run(() => Method2());
Console.WriteLine("waiting for Task 2");
Console.WriteLine("Tasks complete. Press any key to exit.");