c#多个事件和返回代码

时间:2017-11-01 17:32:18

标签: c#

我有以下事件:

public delegate bool AccountEvent(string AccountId);
public static event AccountEvent AccountCreationCallback;

所以,在代码中我有这个:

Users.AccountCreationCallback += CreateWallet;

bool CreateWallet(string AccountId)
{
    // do something
    return true;
}

并以这种方式处理事件:

if (AccountCreationCallback != null)
{
    return AccountCreationCallback(User._id);
}

return true;

所以,如果有一个事件并且它失败了,我会返回false;否则,是的。

现在,问题是如果我有多个事件会发生什么?

Users.AccountCreationCallback += CreateWallet;
Users.AccountCreationCallback += AttachAddress;

我真正想做的是能够有几个事件并且如果一个事件返回false就停止调用链。

可以用c#事件系统实现吗?

1 个答案:

答案 0 :(得分:4)

您可以通过利用MulticastDelegate.GetInvocationList()

来使用以下模式
class EventEmitter
{
    public event Func<bool> FooEvent;
    public EventEmitter()
    {
        //....
    }

    private void Emit()
    {
        var handlers = FooEvent.GetInvocationList();
        foreach (Func<bool> handler in handlers)
        {
            var result = handler();
            if (!result)
            {
                break;
            }
        }
    }
}

值得注意的是,调用列表的顺序是按照注册顺序排列的,但这是可能不应该依赖的实现细节,尤其是作为事件注册can be overridden

相关问题