No estoy seguro de qué estrategia adoptar ... Me estoy enfocando en que mi operación se complete, pero también me gustaría mantener los problemas de rendimiento en un mínimo también. ..hay un método llamado Execute() que tiene que esperar (se ejecuta de forma síncrona) hasta que se complete una operación. Esta operación ocurre en otro hilo. Hay 2 maneras de implementar la misma cosa ...Para hacer una elección entre ManualResetEvent o Thread.Sleep()
Al usar ManualResetEvent
void Execute()
{
taskHandle = new ManualResetEvent(false);
.
.
//delegate task to another thread
.
.
taskHandle.WaitOne();
}
O
Mediante el uso de un simple, mientras que construir
void Execute()
{
.
.
//delegate task to another thread
.
.
while (!JobCompleted)
Thread.Sleep(1000);
}
¿Cuál de los dos enfoques ¿Debería adoptar ... por qué?
EDITAR:
Q2. ¿Qué pasa si acabo de tener un edificio vacío mientras? Cual es la diferencia...?
while(!JobCompleted);
EDIT: (algo que se reunieron antes)
http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - En este artículo se dice manualresets son comparativamente más lento, ya que salen de código administrado y de regreso en ...
Solo quiero señalar el uso de Thread.Sleep (0). Especifique cero (0) para indicar que este hilo debe suspenderse para permitir la ejecución de otros hilos en espera. En este caso, Sleep (0) es mejor que Sleep (1000), pero usar WaitHandle es aún más apropiado. –
El ciclo while vacío es básicamente un spinwait, consumirá completamente una CPU. No recomendado. – nitzmahone