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