C# while循环或thread.Sleep是否阻止可能引发的事件?
在我的代码中,我使用的是mqtt客户机,当收到消息时,会引发事件处理程序,并将消息存储在列表中C# while循环或thread.Sleep是否阻止可能引发的事件?,c#,.net,events,C#,.net,Events,在我的代码中,我使用的是mqtt客户机,当收到消息时,会引发事件处理程序,并将消息存储在列表中 private void MqttBroker_MqttMessagePublishedReceived(object sender, Events.MqttMessageEventArgs e) { _logger?.Information($"MqttBroker_MqttMessagePublishedReceived - message rec
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}");
}
}
同时,我正在另一个函数中等待x分钟,该函数有一个while循环。这应该用另一种方法来完成,但目前我让它停止。但我现在的问题是。这个while循环是否可能阻止正在引发的事件?所以mqtt代理在我处于while循环时发布消息
我的第二个问题是,我让我的线程休眠x分钟,而不是一个while循环。事件是否仍会引发,消息是否仍会存储在我的列表中
提前谢谢你 视情况而定
如果您的事件在另一个线程中调用,则不会有任何问题,但如果您的EventThread和LoopThread相同,则事件不会被“吸入”它将等待while循环结束,然后它将触发事件,假设
MqttBroker\u MqttMessagePublishedReceived
在其自己的线程上发布,则可能不会。然而,如果轮询线程没有睡眠,你将破坏你的CPU,如果你不采取预防措施,你肯定会有线程安全问题,最后你可能会阻塞一些其他线程,这可能是UI。它几乎可以保证有一个更好、更有效的方法谢谢你的回答,有没有一种方法可以做到这一点而不冒错过事件的风险?所以基本上,事件不能“错过”,它们将被调用到以后的某个点。所以不要害怕