Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading.Tasks;
- namespace lab5
- {
- class Program
- {
- //
- static int Op(int x, int y)
- {
- Console.WriteLine("using Op func");
- return x % y;
- }
- // объявляем новый делегат
- public delegate int ModuleDelegate(int x, int y);
- static int Op2(int x, int y)
- {
- Console.WriteLine("using Op2 func: {0}", x * x + y * y);
- return x * x + y * y;
- }
- static async Task Main(string[] args)
- {
- Console.WriteLine("\tpart 1");
- Console.WriteLine("synchronous");
- // создаём делегат и добавляем в него метод
- ModuleDelegate moduleDelegate = new ModuleDelegate(Op);
- Console.WriteLine("continue working method Main");
- // вычисляем значение, используя делегат
- int res1 = moduleDelegate(7, 5);
- Console.WriteLine("mod res1 {0}", res1);
- Console.WriteLine("asynchronous");
- // не работает в новом .net core
- //IAsyncResult resultObj = moduleDelegate.BeginInvoke(9, 6, null, null);
- //int res2 = moduleDelegate.EndInvoke(resultObj);
- // вместо них используется Task и await
- Console.WriteLine("Starting with Task.Run");
- // создаём новое задание - запуск делегата, передаём параметры
- var task = Task.Run(() => moduleDelegate.Invoke(8,5));
- Console.WriteLine("Waiting on work...");
- // await предваряет выполнение задачи, которая будет выполняться асинхронно
- var asyncRes = await task;
- Console.WriteLine("mod async res {0}", asyncRes);
- Console.WriteLine("\tpart 2");
- // добавляем в наш делегат анонимную функцию
- moduleDelegate += delegate(int x, int y)
- {
- Console.WriteLine("anonymous delegate using: {0}", x + y);
- return x + y;
- };
- // добавляем лямбда-функцию
- moduleDelegate += (x, y) =>
- {
- Console.WriteLine("lambda expression using: {0}", x * y);
- return x * y;
- };
- moduleDelegate += Op2;
- // здесь мы увидим результат работы последнего добавленного метода в делегат
- Console.WriteLine("result of working delegate: {0}", moduleDelegate(17,6));
- Console.WriteLine("\tdeleting one method...");
- moduleDelegate -= Op2;
- Console.WriteLine("result of working delegate after del: {0}", moduleDelegate(17, 6));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement