在方法中嵌入事件处理程序的缺点

时间:2012-11-21 14:16:18

标签: c# asynchronous manualresetevent

有时当我使用具有异步方法进行交互的程序集时(你调用一个方法,然后你得到一个回复​​的事件)我喜欢通过在方法中嵌入事件处理程序将它们转换为synchrounus方法。

问题是;我没有看到任何其他地方的这种代码所以我有一种令人讨厌的感觉,这种方法有一些主要的缺点,我错过了,其他人都看到了。所以你怎么想 - 编写这样的代码是否可以?

嵌入连接事件的事件处理程序的Logon方法的简单示例。

    private void Logon(GatewayConnection connection)
    {
        const int fiveSecondTimeout = 5000;
        ManualResetEvent waitUntilOnlineEvent = new ManualResetEvent(false);
        EventHandler<ConnectionEventArgs> connectionHandler = (sender, e) =>
                                            {
                                                if (connection.Status == ConnectionStatus.Connected)
                                                    waitUntilOnlineEvent.Set();
                                            };

        connection.ConnectionEvent += connectionHandler;
        connection.Connect();
        bool timeoutReached = !waitUntilOnlineEvent.WaitOne(fiveSecondTimeout);
        connection.ConnectionEvent -= connectionHandler;

        if (timeoutReached)
            throw new ApplicationException("Logon failure");
    }

我也认为这种类型的代码,即使实际的方法可能变得有点复杂,也可以帮助保持一个封装了一个对象的类,其中包含大量事件,并且易于阅读。

0 个答案:

没有答案