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为异步委托。
何时使用委托。(自我理解)
简单来讲当你需要处理一件事,但不知道该给谁的时候,这时我们需要使用委托。简单来讲就是这个方法可以被多个不同类型的方法调用的时候。我们需要使用委托。
委托和接口的区别。(自我理解)
委托在乎事件的完成结果,不在乎过程,也就是不需要调用方法中的属性,而接口更多的在乎在完成过程中,方法的存在很多类似的属性成员及完成方法存在很多相似步骤,考虑接口
何时使用同步和异步
不建议多开一个线程异步调用,当委托给的方法和现有的程序耦合性很低,且执行较为复杂。负荷很大。可以考虑异步调用。