Usando mis EventArgs cusom tales como:EventHandler <TEventArgs> seguridad de hilo en C#?
public event EventHandler<MyEventArgs> SampleEvent;
de msdn por ejemplo:
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.
public event EventHandler<MyEventArgs> SampleEvent;
public void DemoEvent(string val)
{
// Copy to a temporary variable to be thread-safe.
EventHandler<MyEventArgs> temp = SampleEvent;
if (temp != null)
temp(this, new MyEventArgs(val));
}
}
tengo pregunta:
1) mirar el código marcado:
no veo una razón por la que debe copiarse a otro parámetro (complejo de los hilos)
ya que tenemos la keyowrd event
, nadie puede tocar su lista de invocación (sin código extraño a la clase me refiero)
2) Si no estoy equivocado, la función DemoEvent
debe ser virtual, para que pueda ser anulado en las clases sub ... (estoy seguro de que he visto en alguna parte)
lo extraño es que ReSharper también suele añadir virtuales :
por lo que si tengo este código:
me sugiere:
y cuando pulsarlo:
lo que de nuevo mi preguntas:
1) ¿Cuál es el escenario que resolverá esta línea EventHandler<MyEventArgs> temp = SampleEvent;
, con respecto al hilo de seguridad?
2) ¿No debería la función ser virtual
? (estoy seguro de que he visto este patrón con virtual)
Resharper es solo un punto de vista correcto e incorrecto. No es un absoluto – podiluska
Tenga en cuenta que en realidad hay dos condiciones de carrera aquí. Este cambio de código corrige solo una de estas razas. Consulte el excelente artículo de Eric Lippert, [Events and Races] (http://blogs.msdn.com/b/ericlippert/archive/2009/04/29/events-and-races.aspx) para obtener una explicación completa. – Brian
posible duplicado de [C# Eventos y seguridad de subprocesos] (http://stackoverflow.com/questions/786383/c-sharp-events-and-thread-safety) –