Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

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

 

Publicado: noviembre de 2016

Crea una continuación que se ejecuta cuando se completa la tarea de destino según el elemento TaskContinuationOptions especificado.

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

public Task ContinueWith(
	Action<Task> continuationAction,
	TaskContinuationOptions continuationOptions
)

Parámetros

continuationAction
Type: System.Action<Task>

Una acción para ejecutarse según el continuationOptions especificado. Cuando se ejecute, al delegado se le pasará la tarea completada como un argumento.

continuationOptions
Type: System.Threading.Tasks.TaskContinuationOptions

Opciones para la programación y el comportamiento de la continuación. Incluye criterios, como OnlyOnCanceled, y opciones de ejecución, como ExecuteSynchronously.

Valor devuelto

Type: System.Threading.Tasks.Task

Nuevo objeto Task de continuación.

Exception Condition
ArgumentNullException

El continuationAction del argumento es null.

ArgumentOutOfRangeException

El continuationOptions argumento especifica un valor no válido para TaskContinuationOptions.

El valor devuelto Task no se programará para su ejecución hasta que haya finalizado la tarea actual. Si especifican los criterios de continuación a través de la continuationOptions parámetro no se cumplen, se cancela la tarea de continuación en lugar de programarse.

En el ejemplo siguiente se muestra cómo utilizar TaskContinuationOptions para especificar que una tarea de continuación debe ejecutarse sincrónicamente cuando se complete la tarea antecedente. (Si la tarea especificada ya se ha completado de la hora ContinueWith se llama, sincrónico se ejecutará en el subproceso que llame a ContinueWith.)


public class TaskCounter
{
   private volatile int _count;

   public void Track(Task t)
   {
      if (t == null) throw new ArgumentNullException("t");
      Interlocked.Increment(ref _count);
      t.ContinueWith(ct => Interlocked.Decrement(ref _count), TaskContinuationOptions.ExecuteSynchronously);
   }

   public int NumberOfActiveTasks { get { return _count; } }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: