-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathFlow.cs
More file actions
95 lines (76 loc) · 4.35 KB
/
Copy pathFlow.cs
File metadata and controls
95 lines (76 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Threading.Tasks;
using Cleipnir.ResilientFunctions.CoreRuntime.Invocation;
using Cleipnir.ResilientFunctions.Domain;
namespace Cleipnir.Flows;
public abstract class BaseFlow
{
public Workflow Workflow { get; init; } = null!;
public Effect Effect => Workflow.Effect;
#region Capture explicit id with ResiliencyLevel
public Task<T> Capture<T>(string id, Func<Task<T>> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(id, work, resiliencyLevel);
public Task<T> Capture<T>(string id, Func<T> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(id, work, resiliencyLevel);
public Task Capture(string id, Func<Task> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(id, work, resiliencyLevel);
public Task Capture(string id, Action work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(id, work, resiliencyLevel);
#endregion
#region Capture explicit id with RetryPolicy
public Task<T> Capture<T>(string id, Func<Task<T>> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(id, work, retryPolicy, flush);
public Task<T> Capture<T>(string id, Func<T> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(id, work, retryPolicy, flush);
public Task Capture(string id, Func<Task> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(id, work, retryPolicy, flush);
public Task Capture(string id, Action work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(id, work, retryPolicy, flush);
#endregion
#region Capture implicit id with RetryPolicy
public Task<T> Capture<T>(Func<Task<T>> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(work, retryPolicy, flush);
public Task<T> Capture<T>(Func<T> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(work, retryPolicy, flush);
public Task Capture(Func<Task> work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(work, retryPolicy, flush);
public Task Capture(Action work, RetryPolicy retryPolicy, bool flush = true)
=> Effect.Capture(work, retryPolicy, flush);
#endregion
#region Capture implicit id with ResiliencyLevel
public Task<T> Capture<T>(Func<Task<T>> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(work, resiliencyLevel);
public Task<T> Capture<T>(Func<T> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(work, resiliencyLevel);
public Task Capture(Func<Task> work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(work, resiliencyLevel);
public Task Capture(Action work, ResiliencyLevel resiliencyLevel = ResiliencyLevel.AtLeastOnce)
=> Effect.Capture(work, resiliencyLevel);
#endregion
public Task<TMessage> Message<TMessage>() where TMessage : class
=> Workflow.Message<TMessage>();
public Task<TMessage?> Message<TMessage>(DateTime waitUntil) where TMessage : class
=> Workflow.Message<TMessage>(waitUntil);
public Task<TMessage?> Message<TMessage>(TimeSpan waitFor) where TMessage : class
=> Workflow.Message<TMessage>(waitFor);
public Task<TMessage> Message<TMessage>(Func<TMessage, bool> filter) where TMessage : class
=> Workflow.Message(filter);
public Task<TMessage?> Message<TMessage>(Func<TMessage, bool> filter, DateTime waitUntil) where TMessage : class
=> Workflow.Message(filter, waitUntil);
public Task<TMessage?> Message<TMessage>(Func<TMessage, bool> filter, TimeSpan waitFor) where TMessage : class
=> Workflow.Message(filter, waitFor);
public Task Delay(TimeSpan @for, bool suspend = true) => Workflow.Delay(@for, suspend);
public Task Delay(DateTime until, bool suspend = true) => Workflow.Delay(until, suspend);
}
public abstract class Flow : BaseFlow
{
public abstract Task Run();
}
public abstract class Flow<TParam> : BaseFlow where TParam : notnull
{
public abstract Task Run(TParam param);
}
public abstract class Flow<TParam, TResult> : BaseFlow where TParam : notnull
{
public abstract Task<TResult> Run(TParam param);
}