2

有时,当我使用具有异步交互方法的程序集时(您调用一个方法,然后您得到一个带有答案的事件),我喜欢通过在方法中嵌入事件处理程序将它们转换为同步方法。

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

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

    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");
    }

我还认为,这种类型的代码,即使实际方法可能变得有点复杂,也有助于保持封装具有大量事件的对象的类的简洁和易于阅读。

4

0 回答 0