首页 > 解决方案 > while 循环或 thread.Sleep 是否会阻止可能引发的事件?

问题描述

在我的代码中,我使用的是 mqtt 客户端,当收到消息时,会引发事件处理程序并将消息存储在列表中。

private void MqttBroker_MqttMessagePublishedReceived(object sender, Events.MqttMessageEventArgs e)
        {
            _logger?.Information($"MqttBroker_MqttMessagePublishedReceived - message received by the watcher {e}");
            try
            {
                if (e?.Payload != null)
                {
                    _messages.AddMessage(e.Payload);
                }
            }
            catch (Exception ex)
            {
                _logger?.Error($"MqttBroker_MqttMessagePublishedReceived - Something went wrong: {ex}");
            }
        }

与此同时,我在另一个带有 while 循环的函数中等待 x 分钟。这应该通过另一种方式完成,但目前我让它休息。但我现在的问题是。这个while循环是否有可能阻止正在引发的事件?这样 mqtt 代理就在我处于那个 while 循环时发布一条消息?

我的第二个问题如下,我让我的线程休眠 x 分钟而不是 while 循环,事件是否仍会引发,消息是否仍将存储在我的列表中?

先感谢您!

标签: c#.netevents

解决方案


要看。

如果你的 Event 在另一个线程中被调用,不会有任何问题,但如果你的 EventThread 和你的 LoopThread 相同,则事件不会被“吸入”它会等到 while 循环结束,然后它会触发事件


推荐阅读