Compartir a través de


WorkflowInvoker.CancelAsync(Object) Método

Definición

Intenta cancelar el flujo de trabajo que se invocó con el parámetro userState especificado.

public:
 void CancelAsync(System::Object ^ userState);
public void CancelAsync (object userState);
member this.CancelAsync : obj -> unit
Public Sub CancelAsync (userState As Object)

Parámetros

userState
Object

El token para cancelar el flujo de trabajo.

Ejemplos

En el siguiente ejemplo se invoca un flujo de trabajo formado por una actividad LongRunningDiceRoll. La actividad LongRunningDiceRoll tiene dos argumentos de salida que representan los resultados de la operación de tirar los dados. Una vez invocado el flujo de trabajo, el host intenta cancelarlo.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("The workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

string userState = "CancelAsync Example";
invoker.InvokeAsync(userState);

Console.WriteLine("Waiting for the workflow to complete.");
Thread.Sleep(TimeSpan.FromSeconds(1));

Console.WriteLine("Attempting to cancel the workflow.");
invoker.CancelAsync(userState);

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is either completed or cancelled.");

Comentarios

Solo se pueden cancelar los flujos de trabajo invocados por una de las sobrecargas de InvokeAsync que toma un parámetro userState.

Si la cancelación se realiza correctamente, la Cancelled propiedad del InvokeCompletedEventArgs objeto pasado al InvokeCompleted controlador se establece trueen ; de lo contrario, se establece falseen .

Se aplica a