2011-03-14 15 views
5

¿Cómo puedo esperar a que un método termine de usar C#?Espere a que el método finalice

+5

Podría explicar un poco mejor lo que estamos tratando de lograr, por favor? – FarligOpptreden

+5

Si su aplicación no es multiproceso y el método que llamó no es asincrónico, se llamará a su siguiente fragmento de código después de que el método regrese. Necesitamos más información para trabajar aquí, ¿está utilizando hilos o métodos 'Begin ..()'? – Kevin

+0

¿Debemos suponer que estás hablando de una llamada a un método asincrónico? –

Respuesta

43

A menos que esté utilizando varios subprocesos, la ejecución no continuará en el llamando al código hasta que el método se haya completado de todos modos.

Si son usando varios hilos, realmente depende de cómo inicie la tarea. Por ejemplo, podría estar utilizando la ejecución de delegado asíncrono (foo.BeginInvoke(...)) o la Biblioteca de tareas paralelas, o simplemente creando un nuevo hilo. Cada enfoque tiene su propia forma de esperar hasta que la tarea/hilo se haya completado. Por favor nos da más información y podemos ayudar más, pero las opciones pueden incluir:

  • Calling EndInvoke en el delegado, pasando el IAsyncResult devuelto por BeginInvoke
  • Calling Task.Wait (opcionalmente con un tiempo de espera)
  • Calling Thread.Join (opcionalmente con un tiempo de espera)
+30

+1 para una respuesta sensata, Jon Skeet no vomite ninguna mierda. – mdm

+0

+1 Seguro .. @mdm por eso tenemos [Jon Skeet] (http://blog.stackoverflow.com/2008/11/stack-overflow-is-you) aquí –

+0

+1 por proporcionar realmente opciones en el caso de código multiproceso –

10
  1. Llame al método.
  2. Espere a que termine.

Nota: Solo funciona para bloquear llamadas.

+35

Gran algoritmo .../yo aplausos PD: olvidaste '3. GANANCIA !!! ' – zerkms

6

asumo que está pidiendo cómo esperar para un código que se ejecuta en otro Thr ead en su hilo principal. Para ese propósito, el método Thread.Join() hará lo que usted desee.

(Un buen tutorial sobre cómo hacer Multithreading.)

+1

Sé que publicaste esto hace meses, pero ese enlace al tutorial acaba de salvarme la vida. No puedo agradecerle lo suficiente por compartir ese enlace. – JClaspill

+0

@JClaspill Me alegra que te haya ayudado :) –

Cuestiones relacionadas