.NET library with common methods for managing of (long-running) tasks/jobs with rollback/rollforward feature
$ dotnet add package CompuMaster.TaskManagementRun (long-running) Tasks and optionally visualize them
public static ProgressingTaskBundle DummyTaskBundleFailingWithRollbackFailingWithThrownException()
{
var result = new ProgressingTaskBundle("Dummy Task Bundle with exception in 1st steps and failing again in rollback stopping rollback totally");
var task1 = result.CreateAndAddNewTask("Dummy Task 1");
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.1", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.2", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.3", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.4", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.5", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.6 FAILING", () => throw new Exception("Failure-Test in Dummy"), TimeSpan.FromSeconds(1)));
task1.FirstStepsWhichCanBeRolledBack.Add(new ProgressingTaskFailFastStep("Dummy Step 1.7", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1)));
task1.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Step 2.1", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Step 2.2", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Step 2.3", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Step 2.4", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.RollbackSteps.Add(new ProgressingTaskStep("Dummy Rollback Step 1", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.RollbackSteps.Add(new ProgressingTaskStep("Dummy Rollback Step 2", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task1.RollbackSteps.Add(new ProgressingTaskStep("Dummy Rollback Step 3", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.ThrowException));
task1.RollbackSteps.Add(new ProgressingTaskStep("Dummy Rollback Step 4", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.ThrowException));
var task2 = result.CreateAndAddNewTask("Dummy Task 2");
task2.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Task 2 Step 1", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
task2.SecondStepsWithoutRollbackOption.Add(new ProgressingTaskStep("Dummy Task 2 Step 2", () => System.Threading.Thread.Sleep(1000), TimeSpan.FromSeconds(1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue));
return result;
} Public Shared Function DummyTaskBundleFailingWithRollbackFailingWithThrownException() As ProgressingTaskBundle
Dim Result As New ProgressingTaskBundle("Dummy Task Bundle with exception in 1st steps and failig again in rollback stopping rollback totally")
Dim Task1 As ProgressingTaskItem = Result.CreateAndAddNewTask("Dummy Task 1")
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.1", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.2", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.3", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.4", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.5", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.6 FAILING", Sub() Throw New Exception("Failure-Test in Dummy"), New TimeSpan(0, 0, 1)))
Task1.FirstStepsWhichCanBeRolledBack.Add(New ProgressingTaskFailFastStep("Dummy Step 1.7", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1)))
Task1.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Step 2.1", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Step 2.2", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Step 2.3", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Step 2.4", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.RollbackSteps.Add(New ProgressingTaskStep("Dummy Rollback Step 1", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.RollbackSteps.Add(New ProgressingTaskStep("Dummy Rollback Step 2", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task1.RollbackSteps.Add(New ProgressingTaskStep("Dummy Rollback Step 3", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.ThrowException))
Task1.RollbackSteps.Add(New ProgressingTaskStep("Dummy Rollback Step 4", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.ThrowException))
Dim Task2 As ProgressingTaskItem = Result.CreateAndAddNewTask("Dummy Task 2")
Task2.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Task 2 Step 1", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Task2.SecondStepsWithoutRollbackOption.Add(New ProgressingTaskStep("Dummy Task 2 Step 2", Sub() Threading.Thread.Sleep(1000), New TimeSpan(0, 0, 1), ProgressingTaskStep.ProgressingTaskStepFailAction.LogExceptionAndContinue))
Return Result
End FunctionCreate form for multiple task bundles
private void TestVonLongRunTaskBundlesButton_Click(object sender, EventArgs e)
{
MultiTaskProgessForm f;
f = new MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollback);
f.Show();
f = new MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollbackFailingWithThrownException);
f.Show();
f = new MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollbackFailingWithLoggedException);
f.Show();
f = new MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingInCriticalStepsWithoutRollbackPossibility);
f.Show();
f = new MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleSuccessful);
f.Show();
}Private Sub TestVonLongRunTaskBundlesButton_Click(sender As Object, e As EventArgs) Handles TestVonLongRunTaskBundlesButton.Click
Dim f As MultiTaskProgessForm
f = New MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollback)
f.Show()
f = New MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollbackFailingWithThrownException)
f.Show()
f = New MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingWithRollbackFailingWithLoggedException)
f.Show()
f = New MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleFailingInCriticalStepsWithoutRollbackPossibility)
f.Show()
f = New MultiTaskProgessForm(DummyTaskBundles.DummyTaskBundleSuccessful)
f.Show()
End Sub
