-
Notifications
You must be signed in to change notification settings - Fork 231
Expand file tree
/
Copy pathNoPersistAsyncActivity.cs
More file actions
42 lines (37 loc) · 1.5 KB
/
NoPersistAsyncActivity.cs
File metadata and controls
42 lines (37 loc) · 1.5 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
using System.Activities;
using System.Activities.Hosting;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace WorkflowApplicationTestExtensions
{
/// <summary>
/// Activity that induces Idle for a few milliseconds but not PersistableIdle.
/// This is similar to UiPath asynchronous in-process activities.
/// </summary>
public class NoPersistAsyncActivity : NativeActivity
{
private readonly Variable<NoPersistHandle> _noPersist = new();
protected override bool CanInduceIdle => true;
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddImplementationVariable(_noPersist);
metadata.AddDefaultExtensionProvider(() => new BookmarkResumer());
base.CacheMetadata(metadata);
}
protected override void Execute(NativeActivityContext context)
{
_noPersist.Get(context).Enter(context);
context.GetExtension<BookmarkResumer>().ResumeSoon(context.CreateBookmark());
}
}
public class BookmarkResumer : IWorkflowInstanceExtension
{
private WorkflowInstanceProxy _instance;
public IEnumerable<object> GetAdditionalExtensions() => [];
public void SetInstance(WorkflowInstanceProxy instance) => _instance = instance;
public void ResumeSoon(Bookmark bookmark) => Task.Delay(10).ContinueWith(_ =>
{
_instance.BeginResumeBookmark(bookmark, null, null, null);
});
}
}