77 lines
2.3 KiB
C#
77 lines
2.3 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
namespace System.Activities.Runtime
|
||
|
{
|
||
|
using System;
|
||
|
using System.Runtime;
|
||
|
using System.Reflection;
|
||
|
using System.Runtime.Serialization;
|
||
|
using System.Diagnostics.CodeAnalysis;
|
||
|
|
||
|
[DataContract]
|
||
|
abstract class ActivityExecutionWorkItem : WorkItem
|
||
|
{
|
||
|
bool skipActivityInstanceAbort;
|
||
|
|
||
|
// Used by subclasses in the pooled case
|
||
|
protected ActivityExecutionWorkItem()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public ActivityExecutionWorkItem(ActivityInstance activityInstance)
|
||
|
: base(activityInstance)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public override bool IsValid
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.ActivityInstance.State == ActivityInstanceState.Executing;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override ActivityInstance PropertyManagerOwner
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.ActivityInstance;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void ClearForReuse()
|
||
|
{
|
||
|
base.ClearForReuse();
|
||
|
this.skipActivityInstanceAbort = false;
|
||
|
}
|
||
|
|
||
|
protected void SetExceptionToPropagateWithoutAbort(Exception exception)
|
||
|
{
|
||
|
this.ExceptionToPropagate = exception;
|
||
|
this.skipActivityInstanceAbort = true;
|
||
|
}
|
||
|
|
||
|
public override void PostProcess(ActivityExecutor executor)
|
||
|
{
|
||
|
if (this.ExceptionToPropagate != null && !skipActivityInstanceAbort)
|
||
|
{
|
||
|
executor.AbortActivityInstance(this.ActivityInstance, this.ExceptionToPropagate);
|
||
|
}
|
||
|
else if (this.ActivityInstance.UpdateState(executor))
|
||
|
{
|
||
|
// NOTE: exceptionToPropagate could be non-null here if this is a Fault work item.
|
||
|
// That means that the next line could potentially overwrite the exception with a
|
||
|
// new exception.
|
||
|
Exception newException = executor.CompleteActivityInstance(this.ActivityInstance);
|
||
|
|
||
|
if (newException != null)
|
||
|
{
|
||
|
this.ExceptionToPropagate = newException;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|