class Boss { public void WorkStarted() { /* 老板不关心。 */ } public void WorkProgressing() { /*老板不关心。 */ } public int WorkCompleted() { Console.WriteLine(“时间差不多!”); return 2; /* 总分为10 */ } }
class Universe { static void Main() { Worker peter = new Worker(); Boss boss = new Boss(); peter.Advise(boss); peter.DoWork();
Console.WriteLine("“工作: 工作完成”"); if( completed != null ) { int grade = completed(); Console.WriteLine(“工人的工作得分=” + grade); } } public WorkStarted started; public WorkProgressing progressing; public WorkCompleted completed; }
class Boss { public int WorkCompleted() { Console.WriteLine("Better..."); return 4; /* 总分为10 */ } }
class Universe { static void Main() { Worker peter = new Worker(); Boss boss = new Boss(); peter.completed = new WorkCompleted(boss.WorkCompleted); peter.DoWork();
static int WorkerCompletedWork() { Console.WriteLine("Universe pleased with worker's work"); return 7; }
static void Main() { Worker peter = new Worker(); Boss boss = new Boss(); peter.completed = new WorkCompleted(boss.WorkCompleted); peter.started = new WorkStarted(Universe.WorkerStartedWork); peter.completed = new WorkCompleted(Universe.WorkerCompletedWork); peter.DoWork();
static void Main() { Worker peter = new Worker(); Boss boss = new Boss(); peter.completed += new WorkCompleted(boss.WorkCompleted); peter.started += new WorkStarted(Universe.WorkerStartedWork); peter.completed += new WorkCompleted(Universe.WorkerCompletedWork); peter.DoWork();
public void DoWork() { ... Console.WriteLine("“工作: 工作完成”"); if( completed != null ) { foreach( WorkCompleted wc in completed.GetInvocationList() ) { int grade = wc(); Console.WriteLine(“工人的工作得分=” + grade); } } }
异步通知:激发 & 忘掉
同时,他的老板和宇宙还要忙于处理其他事情,也就是说他们给彼得打分所花费的事件变得非常长:
class Boss { public int WorkCompleted() { System.Threading.Thread.Sleep(3000); Console.WriteLine("Better..."); return 6; /* 总分为10 */ } }
class Universe { static int WorkerCompletedWork() { System.Threading.Thread.Sleep(4000); Console.WriteLine("Universe is pleased with worker's work"); return 7; } ... }