线程安全事件处理
本文关键字:事件处理 安全 线程 | 更新日期: 2023-09-27 18:11:09
可能重复:
事件调度前检查null…线程安全
安全提升事件线程-最佳实践
protected void NotificationEvent(Object sender, EventArgs e)
{
// Copy to a temporary variable to be thread-safe
EventHandler<EventArgs> tmp = mNotification;
if (tmp!= null)
{
tmp(this, null);
}
}
复制mNotification
如何确保线程安全。有人能解释一下吗?
如果是
if (mNotification!=null)
{
mNotification(this, null);
}
mNotification可以由if (mNotification!=null)
和mNotification(this, null);
之间的另一个线程设置为null
它所做的是在该特定时刻复制对原始事件的引用,这样,如果在null检查后随后使用它,它将指向一个未计算为null的引用。如果不使用此模式,则可以检查它是否为null,所有处理程序都可以在另一个线程上取消订阅,然后事件在调用时将为null。复制原始引用可消除此潜在的线程问题。