今天突然就想知道委托的执行过程是阻塞的还是非阻塞的,于是试了下发现是顺序阻塞的
Class2:
public class Class2
{
public delegate void TestHandler();
public event TestHandler TestEvent;
public void DoWork()
{
Console.WriteLine("Class2 DoWork");
if (this.TestEvent != null)
{
this.TestEvent();
}
Console.WriteLine("Class2 DoWork End");
}
}
Class3:
public class Class3
{
public virtual void DoWork()
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Class3 DoWork At {0}", DateTime.Now.ToLongTimeString());
}
}
Class4:
public class Class4 : Class3
{
public override void DoWork()
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Class4 DoWork At {0}", DateTime.Now.ToLongTimeString());
}
}
Class5:
public class Class5
{
public void DoWork()
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Class5 DoWork At {0}", DateTime.Now.ToLongTimeString());
}
}
Program:
class Program
{
static void Main(string[] args)
{
Class2 c2 = new Class2();
Class3 c3 = new Class3();
Class3 c4 = new Class4();
Class5 c5 = new Class5();
c2.TestEvent += () =>
{
c3.DoWork();
c5.DoWork();
c4.DoWork();
};
c2.DoWork();
Console.ReadLine();
}
}
所以说基础不扎实就容易产生这种怀疑,委托本来就是把“别处的”方法“拿过来“执行,再这样测试一下就有(fei)点(chang)搞笑了。