Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Task.ContinueWith (Método) (Action<Task>)

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.

Espacio de nombres:  System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

public Task ContinueWith(
	Action<Task> continuationAction
)

Parámetros

continuationAction
Tipo: System.Action<Task>
Acción que se va a ejecutar cuando se complete el objeto Task. Cuando se ejecute, al delegado se le pasará la tarea completada como un argumento.

Valor devuelto

Tipo: System.Threading.Tasks.Task
Nuevo objeto Task de continuación.

ExcepciónCondición
ObjectDisposedException

El CancellationTokenSource que creó cancellationToken ya se ha eliminado.

ArgumentNullException

El argumento de continuationAction es nulo.

La ejecución de la tarea Task devuelta no se programará hasta que la tarea actual se haya completado, bien porque se ejecute correctamente hasta el final, se produzca un error debido a una excepción no controlada o se abandone antes de acabar por su cancelación.

El ejemplo siguiente se define una tarea que rellena una matriz con 100 valores aleatorios de fecha y hora. Utiliza el método de ContinueWith(Action<Task>) para seleccionar los valores de fecha más tempranas y últimos una vez que la matriz se rellena totalmente.


using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      DateTime[] dates = new DateTime[100];

      Task dTask = Task.Factory.StartNew( () => {
                               Random rnd = new Random();
                               Byte[] buffer = new Byte[8];
                               int ctr = dates.GetLowerBound(0);
                               while (ctr <= dates.GetUpperBound(0)) {
                                  rnd.NextBytes(buffer);
                                  long ticks = BitConverter.ToInt64(buffer, 0);
                                  if (ticks <= DateTime.MinValue.Ticks | ticks >= DateTime.MaxValue.Ticks)
                                     continue;

                                  dates[ctr] = new DateTime(ticks);
                                  ctr++;
                               }
                            } ); 

      Task dTask2 = dTask.ContinueWith( (continuation) => {
                             DateTime earliest = dates[0];
                             DateTime latest = earliest;

                             for (int ctr = dates.GetLowerBound(0) + 1; ctr <= dates.GetUpperBound(0); ctr++) {
                                if (dates[ctr] < earliest) earliest = dates[ctr];
                                if (dates[ctr] > latest) latest = dates[ctr];
                             }
                             Console.WriteLine("Earliest date: {0}", earliest);
                             Console.WriteLine("Latest date: {0}", latest);
                          } );                      
      // Since a console application otherwise terminates, wait for both tasks to complete.
      Task.WaitAll( new Task[] {dTask, dTask2} );
   }
}
// The example displays output like the following:
//       Earliest date: 2/11/0110 12:03:41 PM
//       Latest date: 7/29/9989 2:14:49 PM


Dado que una aplicación de consola puede finalizar antes de que la tarea de continuación se ejecute, el método de WaitAll se llama para garantizar que la tarea original y su continuación terminado de ejecutarse antes de que finalice el ejemplo.

Para obtener otro ejemplo, vea Tareas de continuación.

.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Compatible con: 4

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft