|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.Activities
{
using System.Activities.Runtime;
using System.Runtime;
[Fx.Tag.XamlVisible(false)]
public sealed class AsyncCodeActivityContext : CodeActivityContext
{
AsyncOperationContext asyncContext;
internal AsyncCodeActivityContext(AsyncOperationContext asyncContext, ActivityInstance instance, ActivityExecutor executor)
: base(instance, executor)
{
this.asyncContext = asyncContext;
}
public bool IsCancellationRequested
{
get
{
ThrowIfDisposed();
return this.CurrentInstance.IsCancellationRequested;
}
}
public object UserState
{
get
{
ThrowIfDisposed();
return this.asyncContext.UserState;
}
set
{
ThrowIfDisposed();
this.asyncContext.UserState = value;
}
}
public void MarkCanceled()
{
ThrowIfDisposed();
// This is valid to be called while aborting or while canceling
if (!this.CurrentInstance.IsCancellationRequested && !this.asyncContext.IsAborting)
{
throw FxTrace.Exception.AsError(new InvalidOperationException(SR.MarkCanceledOnlyCallableIfCancelRequested));
}
this.CurrentInstance.MarkCanceled();
}
}
}
|