chr
2026-04-08 53e656200368a983e563550e2cc1acbc6d86b729
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
//Copyright 2012-2019 Keysight Technologies
//
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
using OpenTap;
using System.Collections.Generic;
 
namespace OpenTap.Plugins.PluginDevelopment
{
    [Display("Defer Task Example", Groups: new[] { "Examples", "Plugin Development", "Step Execution" },
        Description: "This example shows defer actions that run after the step's run method returns.")]
    public class DeferTaskStep : TestStep
    {
        [Display("Run Delay")]
        [Unit("s")]
        public int RunDelay { get; set; }
 
        [Display("Defer Delay")]
        [Unit("s")]
        public int DeferDelay { get; set; }
 
        [Display("PrePlanRun Delay")]
        [Unit("s")]
        public int PrePlanDelay { get; set; }
 
        [Display("PostPlanRun Delay")]
        [Unit("s")]
        public int PostPlanDelay { get; set; }
 
        public DeferTaskStep()
        {
            RunDelay = 3;
            DeferDelay = 2;
            PostPlanDelay = 1;
            PrePlanDelay = 1;
        }
 
        public override void PrePlanRun()
        {
            base.PrePlanRun();
            TapThread.Sleep(PrePlanDelay * 1000);
        }
 
        public override void PostPlanRun()
        {
            TapThread.Sleep(PostPlanDelay * 1000);
            base.PostPlanRun();
        }
 
        public override void Run()
        {
            TapThread.Sleep(RunDelay * 1000);
            Results.Defer(() =>
            {
                TapThread.Sleep(DeferDelay * 1000);
 
                // You can also publish results here for example.
                Results.Publish("MyTestResult", new List<string> { "Test" }, 1);
            });
        }
 
    }
}