在流程中触发事件和回调的正确/建议方法是什么?

时间:2019-02-19 12:10:12

标签: c# events callback architecture

我负责内部代码库/ SDK的体系结构。我们在如何标准化API内触发回调和事件的顺序方面存在冲突。我们担心两种情况。

class Foo {

    public event Action StuffDone;

    public void DoStuff(Action callback) {

        StuffDone?.Invoke();
        callback?.Invoke();

    }

}

我们已经意识到有时调用事件和回调的顺序是相反的,这似乎很不一致,但是我们找不到任何资源来备份一种订购方式或另一种订购方式。

提出了两个理由:

  1. 在{em} {em}之前调用event,因为callback是过程的一部分,而event只是过程的一部分呼叫者已完成处理的信号。

  2. 在{{1}之后调用callback ,因为应首先将有关过程完成的信息通知给方法的调用者/过程的调用者,而不是将其通知给其他人实体(通过event)。

将感谢所有反馈和资源!

1 个答案:

答案 0 :(得分:0)

您想使其明确。事实是您调用行为很重要。这意味着您应该考虑如何使用您的事件并进行相应的设计。您要一个,另一个,还是两者都选?无论如何,请尝试使事件的名称非常明确。

public event Action BeforeStuff;
public event Action AfterStuff;

public void DoStuff(Action callback) 
{
    if (callback == null)
        throw new ArgumentNullException(nameof(callback));
    BeforeStuff?.Invoke();
    callback();
    AfterStuff?.Invoke();
}