public class Human
{
public void Run(){}
public void Jump(){}
public void Eat(){}
//Generalized approach
public EventHandler<HumanActivityProgressChanged> ActivityProgressChanged;
public EventHandler<HumanActivityCompleted> ActivityCompleted;
//Per-method approach
public EventHandler<HumanActivityProgressChanged> Running;
public EventHandler<HumanActivityCompleted> Ran;
public EventHandler<HumanActivityProgressChanged> Jumping;
public EventHandler<HumanActivityCompleted> Jumped;
public EventHandler<HumanActivityProgressChanged> Eating;
public EventHandler<HumanActivityCompleted> Ate;
}
Run Code Online (Sandbox Code Playgroud)
我有不同的方法来实现基于事件的异步模式.这些方法触发ProgressChangedeventargs和Completedeventargs.它们都触发相同的事件标记(如上面的代码所示).
每个异步方法提供一个事件是否有意义?或者只为所有异步方法提供一般化事件?是否存在太多事件?
两者都有效.这实际上取决于你的意图.
您是否希望听众想要听取所有事件并以类似的方式回应?去广告活动.
如果您期望每个对不同方面感兴趣的不同听众,在这些事件上执行截然不同的任务,那么请选择第二个.
api设计背后的想法不是在客户端强加某种使用方式(Rails用户可能不同意),但是你会在设计方式上给出强有力的提示.