WorkflowInvoker.CancelAsync(Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет отмену рабочего процесса, вызванного с указанным состоянием userState
.
public:
void CancelAsync(System::Object ^ userState);
public void CancelAsync (object userState);
member this.CancelAsync : obj -> unit
Public Sub CancelAsync (userState As Object)
Параметры
- userState
- Object
Маркер для отменяемого рабочего процесса.
Примеры
В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll
. Действие LongRunningDiceRoll
имеет два выходных аргумента, представляющих результаты броска игральных костей. Когда вызывается рабочий процесс, сервер пытается отменить его.
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.");
Комментарии
Отменять можно только рабочий процесс, вызванный одним из перегруженных вариантов метода InvokeAsync, который принимает параметр userState
.
Если отмена выполнена успешно, свойству CancelledInvokeCompletedEventArgs объекта , переданному обработчику InvokeCompleted , присваивается значение true
; в противном случае ему присваивается значение false
.