Deledate同步异步研究

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace LearnDelegate
{
    class Program
    {
        public static void Main(string[] args)
        {
            SyncDel del = Calulate;
            int x = 10;
            int y = 10;
            del.Invoke(x, y);
            CalOK();

            AsyncDel1 del1 = Calulate;
            del1.BeginInvoke(x, y, AsynCalOK, null);

            AsyncDel2 del2 = ReturnCalulate;
            var AsynResult = del2.BeginInvoke(x, y, AsynCalOK, null);
            int result = del2.EndInvoke(AsynResult);

            Console.WriteLine("主线程运行完成");

        }
        public static void Calulate(int x, int y)
        {
            Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算:" + (x + y));
        }
        public static int ReturnCalulate(int x, int y)
        {

            Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算" + (x + y));
            return x + y;
        }
        public static void CalOK()
        {
            Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算完成");
        }
        public static void AsynCalOK(IAsyncResult result)
        {
            Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "计算完成");
        }
        public delegate void SyncDel(int x, int y);
        public delegate void AsyncDel1(int x, int y);
        public delegate int AsyncDel2(int x, int y);
    }
}

执行结果

SynDel是同步委托,AsynDel1和AsynDel2为异步委托。

何时使用委托。(自我理解)

简单来讲当你需要处理一件事,但不知道该给谁的时候,这时我们需要使用委托。简单来讲就是这个方法可以被多个不同类型的方法调用的时候。我们需要使用委托。

委托和接口的区别。(自我理解)

委托在乎事件的完成结果,不在乎过程,也就是不需要调用方法中的属性,而接口更多的在乎在完成过程中,方法的存在很多类似的属性成员及完成方法存在很多相似步骤,考虑接口

何时使用同步和异步

不建议多开一个线程异步调用,当委托给的方法和现有的程序耦合性很低,且执行较为复杂。负荷很大。可以考虑异步调用。

原文地址:https://www.cnblogs.com/shikyoh/p/2397641.html