Update handling of null outcomes in activity execution
The code was adjusted to correctly handle cases when the method `GetBackgroundOutcomes` returns null. This would cause the activity to complete prematurely. Fixes #4763
This commit is contained in:
parent
900aac6d56
commit
c2ec2bda5a
|
|
@ -40,9 +40,9 @@ public static class BackgroundActivityExecutionContextExtensions
|
|||
/// <summary>
|
||||
/// Gets the background outcomes.
|
||||
/// </summary>
|
||||
public static IEnumerable<string> GetBackgroundOutcomes(this ActivityExecutionContext activityExecutionContext)
|
||||
public static IEnumerable<string>? GetBackgroundOutcomes(this ActivityExecutionContext activityExecutionContext)
|
||||
{
|
||||
return activityExecutionContext.GetProperty<IEnumerable<string>>("BackgroundOutcomes") ?? Enumerable.Empty<string>();
|
||||
return activityExecutionContext.GetProperty<IEnumerable<string>>("BackgroundOutcomes");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ public class DefaultBackgroundActivityInvoker : IBackgroundActivityInvoker
|
|||
var outcomesKey = BackgroundActivityInvokerMiddleware.GetBackgroundActivityOutcomesKey(activityNodeId);
|
||||
var journalDataKey = BackgroundActivityInvokerMiddleware.GetBackgroundActivityJournalDataKey(activityNodeId);
|
||||
var scheduledActivitiesKey = BackgroundActivityInvokerMiddleware.GetBackgroundActivityScheduledActivitiesKey(activityNodeId);
|
||||
var outcomes = activityExecutionContext.GetBackgroundOutcomes().ToList();
|
||||
var outcomes = activityExecutionContext.GetBackgroundOutcomes()?.ToList();
|
||||
var scheduledActivities = activityExecutionContext.GetBackgroundScheduledActivities().ToList();
|
||||
|
||||
var dispatchRequest = new DispatchWorkflowInstanceRequest
|
||||
|
|
@ -119,13 +119,15 @@ public class DefaultBackgroundActivityInvoker : IBackgroundActivityInvoker
|
|||
BookmarkId = bookmarkId,
|
||||
Properties = new Dictionary<string, object>
|
||||
{
|
||||
[outcomesKey] = outcomes,
|
||||
[scheduledActivitiesKey] = JsonSerializer.Serialize(scheduledActivities),
|
||||
[inputKey] = outputValues,
|
||||
[journalDataKey] = activityExecutionContext.JournalData
|
||||
}
|
||||
};
|
||||
|
||||
if (outcomes != null)
|
||||
dispatchRequest.Properties[outcomesKey] = outcomes;
|
||||
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
_logger.LogInformation("Background execution for activity {ActivityNodeId} was canceled", activityNodeId);
|
||||
|
|
|
|||
Loading…
Reference in a new issue