parent
ef0022b610
commit
cb4637fe19
|
|
@ -42,11 +42,17 @@ public class FlowSendHttpRequest : SendHttpRequestBase
|
|||
await context.CompleteActivityWithOutcomesAsync("Failed to connect");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async ValueTask HandleTaskCanceledExceptionAsync(ActivityExecutionContext context, TaskCanceledException exception)
|
||||
{
|
||||
await context.CompleteActivityWithOutcomesAsync("Timeout");
|
||||
}
|
||||
|
||||
private static ValueTask<IDictionary<string, object>> GetExpectedStatusCodesOptionsAsync(PropertyInfo property, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var options = new Dictionary<string, object>
|
||||
{
|
||||
[nameof(DynamicOutcomesOptions)] = new DynamicOutcomesOptions(new[]{"Unmatched status code", "Failed to connect", "Done"})
|
||||
[nameof(DynamicOutcomesOptions)] = new DynamicOutcomesOptions(new[]{"Unmatched status code", "Failed to connect", "Timeout", "Done"})
|
||||
};
|
||||
|
||||
return new(options);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ public class SendHttpRequest : SendHttpRequestBase
|
|||
/// The activity to execute when the HTTP request fails to connect.
|
||||
/// </summary>
|
||||
public IActivity? FailedToConnect { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The activity to execute when the HTTP request times out.
|
||||
/// </summary>
|
||||
public IActivity? Timeout { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async ValueTask HandleResponseAsync(ActivityExecutionContext context, HttpResponseMessage response)
|
||||
|
|
@ -55,6 +60,12 @@ public class SendHttpRequest : SendHttpRequestBase
|
|||
await context.ScheduleActivityAsync(FailedToConnect, OnChildActivityCompletedAsync);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async ValueTask HandleTaskCanceledExceptionAsync(ActivityExecutionContext context, TaskCanceledException exception)
|
||||
{
|
||||
await context.ScheduleActivityAsync(Timeout, OnChildActivityCompletedAsync);
|
||||
}
|
||||
|
||||
private async ValueTask OnChildActivityCompletedAsync(ActivityCompletedContext context)
|
||||
{
|
||||
await context.TargetContext.CompleteActivityAsync();
|
||||
|
|
|
|||
|
|
@ -88,6 +88,11 @@ public abstract class SendHttpRequestBase : Activity<HttpResponseMessage>
|
|||
/// Handles an exception that occurred while sending the request.
|
||||
/// </summary>
|
||||
protected abstract ValueTask HandleRequestExceptionAsync(ActivityExecutionContext context, HttpRequestException exception);
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="TaskCanceledException"/> that occurred while sending the request.
|
||||
/// </summary>
|
||||
protected abstract ValueTask HandleTaskCanceledExceptionAsync(ActivityExecutionContext context, TaskCanceledException exception);
|
||||
|
||||
private async Task TrySendAsync(ActivityExecutionContext context)
|
||||
{
|
||||
|
|
@ -113,7 +118,9 @@ public abstract class SendHttpRequestBase : Activity<HttpResponseMessage>
|
|||
}
|
||||
catch (TaskCanceledException e)
|
||||
{
|
||||
context.AddExecutionLogEntry("Error", e.Message, payload: new { StackTrace = e.StackTrace });
|
||||
context.JournalData.Add("Cancelled", true);
|
||||
await HandleTaskCanceledExceptionAsync(context, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue