static void Main(string[] args) { Console.WriteLine("Escolha uma opção"); Console.WriteLine("1-Delegagte"); Console.WriteLine("2-Lock"); Console.WriteLine("3-SocketTCP"); Console.WriteLine("4-Task"); Console.WriteLine("5-Threads"); Console.WriteLine("5-Collections"); var key = Console.ReadLine(); var opt = int.TryParse(key, out int result) ? result : 0; Console.WriteLine("\n"); switch (opt) { case 1: // Creates one delegate for each method. For the instance method, an // instance (mySC) must be supplied. For the static method, use the // class name. mySampleClass mySC = new mySampleClass(); myMethodDelegate myD1 = new myMethodDelegate(mySC.myStringMethod); myMethodDelegate myD2 = new myMethodDelegate(mySampleClass.mySignMethod); // Invokes the delegates. Console.WriteLine("{0} is {1}; use the sign \"{2}\".", 5, myD1(5), myD2(5)); Console.WriteLine("{0} is {1}; use the sign \"{2}\".", -3, myD1(-3), myD2(-3)); Console.WriteLine("{0} is {1}; use the sign \"{2}\".", 0, myD1(0), myD2(0)); break; case 2: Task.Run(async() => await AccountTest.MainSample()).Wait(); break; case 3: SynchronousSocketClient.StartClient(); break; case 4: TaskSample.MainSample(); break; case 5: ThreadSample.Run(); break; case 6: Console.WriteLine("Collections"); Console.WriteLine("1-ConcurrentDictionary"); Task.Run(async() => await TestDictionary.RunSample()).Wait(); break; default: Console.WriteLine("Opção inválida"); break; } }