using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
public static void Main()
Dictionary<int,Persons> MyDic = new Dictionary<int, Persons>();
MyDic.Add(1, new Persons("Person 1", "ChopStick 1", "ChopStick 2"));
MyDic.Add(2, new Persons("Person 2", "ChopStick 3", "ChopStick 4"));
MyDic.Add(3, new Persons("Person 3", "ChopStick 5", "ChopStick 1"));
MyDic.Add(4, new Persons("Person 4", "ChopStick 2", "ChopStick 3"));
MyDic.Add(5, new Persons("Person 5", "ChopStick 4", "ChopStick 5"));
Task task = new Task(Persons.Eating, p.Value);
static object lockchopsticks = new object();
public string Name { get; set; }
public string LchopStick { get; set; }
public string RchopStick { get; set; }
public Persons(string name, string lchopstick, string rchopstick)
this.LchopStick = lchopstick;
this.RchopStick = rchopstick;
public override string ToString()
return string.Format("{0} {1} {2}",this.Name,this.LchopStick,this.RchopStick);
public static void Eating(object data)
Persons e = (Persons)data;
string lchopstick = e.LchopStick;
string rchopstick = e.RchopStick;
Task T2 = new Task(PickUp, e);
public static void PickUp(object data)
Persons e = (Persons)data;
Console.WriteLine("{0} picks {1}:", e.Name,e.LchopStick);
Console.WriteLine("{0} picks {1}:", e.Name,e.RchopStick);
Console.WriteLine("{0} eats", e.Name);
Task T3 = new Task(DropOff, e);
public static void DropOff(object data)
Persons e = (Persons)data;
Console.WriteLine("{0} releases {1}:", e.Name, e.LchopStick);
Console.WriteLine("{0} releases {1}:", e.Name, e.RchopStick);