Uso de tareas en paralelo Biblioteca - una combinación de tareas

  En esta sección se muestra cómo configurar las tareas interdependientes. Vamos a aprender cómo crear una tarea, sólo se ejecutará cuando se haya completado la tarea padre. Además, para explorar la posibilidad de guardar la sobrecarga de hilo es muy corto misión.

clase Programa
{
    estática  vacío principal ( string [] args)
    {
        var firstTask = nueva tarea < int > (() => TaskMethod ( " Primera Prueba " , 3 ));
        var secondTask = nueva tarea < int > (() => TaskMethod ( " Segunda Prueba " , 2 ));
 
        firstTask.ContinueWith ( // establece la tarea a las primeras operaciones posteriores realizados después de la finalización de la primera tarea 
            T => Console.WriteLine ( " de la primera respuesta es el ID del tema {0} {}. 1, la piscina es hilo de rosca .: {2} " ,
                t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),
            TaskContinuationOptions.OnlyOnRanToCompletion);
 
        firstTask.Start ();
        secondTask.Start ();
 
        Los Thread.Sleep (TimeSpan.FromSeconds ( 4. )); // ---- espera hilo principal para la realización de las anteriores dos tareas, 4 segundos deberían ser suficientes para llevar a cabo completamente la operación anterior 2 
     // comentario cabo la declaración anterior, la ejecución del hilo principal directamente la siguiente declaración, el funcionamiento posterior de la segunda tarea se coloca en el grupo de subprocesos

/ * Establecer la segunda tarea de la operación posterior, TaskContinuationOptions.ExecuteSynchronously establece la ejecución sincrónica,
* si lo anterior no espera a 4 segundos, la operación posterior en el grupo de subprocesos a esperar a la segunda tarea después de completar la ejecución; si la espera durante 4 segundos, es decir, espera por
* se completa la segunda tarea, la operación subsiguiente se lleva a cabo en el hilo principal. Dado que la operación subsiguiente es muy corto, por lo que el hilo principal de puesta en
* corre rápido grupo de subprocesos.
* TaskContinuationOptions.OnlyOnRanToCompletion indica la segunda tarea será programada después de la finalización de las tareas de seguimiento.
* /

        Continuaciones la tarea = secondTask.ContinueWith ( // segunda tarea se ejecuta otra operación posterior 
            T => Console.WriteLine ( " de la sociedad de la segunda respuesta el ID del tema {0} {}. 1, el grupo de subprocesos hilo es :. {2} " ,
                t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),
            TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.ExecuteSynchronously);
 
        . Continuation.GetAwaiter () la OnCompleted ( // una tarea continuación sigue para programar la tarea posterior 
            () => Console.WriteLine ( " continuaciones del Completado el Hilo el ID de tarea {0}, el grupo de subprocesos hilo se :! {}. 1 " ,
                Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread));
 
        Thread.Sleep (TimeSpan.FromSeconds ( 2 ));
        Console.WriteLine ();
 
    // El siguiente es un hilo sobre el padre y tareas
    / subtareas * deben ser creados en las carreras de trabajo de los padres, y el derecho a una tarea adicional de los padres!
    * TaskContinuationOptions. Tareas mango AttachedToParent a las tareas de los padres sólo si se cumplieron con todas las sub-tareas, la tarea de los padres para completar.
    * /
FirstTask
= nueva nueva tarea < int > (() => // crear una nueva tarea {
       // proporcionar AttachedToParent a ser dirigido por una llamada tarea subopciones
var innerTask = Task.Factory.StartNew (() => TaskMethod ( " SEGUNDO tarea, " , 5 ), TaskCreationOptions.AttachedToParent); innerTask.ContinueWith (t => TaskMethod ( " Tercera Prueba " , 2 ), TaskContinuationOptions.AttachedToParent); retorno TaskMethod ( " Primera Prueba " , 2 ); }); firstTask.Start (); mientras que (! firstTask.IsCompleted) { Console.WriteLine (firstTask.Status); Thread.Sleep (TimeSpan.FromSeconds ( 0.5 )); } Console.WriteLine (firstTask.Status); Thread.Sleep (TimeSpan.FromSeconds ( 10 )); } estática int TaskMethod ( string nombre, int segundos) { Console.WriteLine ( "La tarea {0} está ejecutando en un ID del tema {1} es hilo grupo de subprocesos: {2} " , nombre, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); Thread.Sleep (TimeSpan.FromSeconds (segundos)); volver 42 * segundos; } }

 

Supongo que te gusta

Origin www.cnblogs.com/gougou1981/p/12610287.html
Recomendado
Clasificación