private void OnWorkflowInstanceTerminatedCleanup(Guid instanceId)
        {
            AbortedWorkflows.Remove(instanceId);

            WorkflowFlowToken flowToken = new WorkflowFlowToken(instanceId);

            TaskManagerFacade.CompleteTasks(flowToken);

            ReleaseAllLocks(instanceId);

            SetWorkflowInstanceStatus(instanceId, WorkflowInstanceStatus.Terminated, false);

            RemoveFlowControllerServicesContainer(instanceId);

            RemoveIfExistFormData(instanceId);

            RemovePersistingType(instanceId);

            DeletePersistedWorkflow(instanceId);

            DeletePersistedFormData(instanceId);

            using (ThreadDataManager.EnsureInitialize())
            {
                FlowControllerFacade.FlowComplete(new WorkflowFlowToken(instanceId));
            }
        }
        public void AbortWorkflow(Guid instanceId)
        {
            DoInitialize(0);

            using (_resourceLocker.Locker)
            {
                if (AbortedWorkflows.Contains(instanceId))
                {
                    return;
                }
                AbortedWorkflows.Add(instanceId);

                if (_resourceLocker.Resources.WorkflowStatusDictionary.ContainsKey(instanceId))
                {
                    var workflowInstance = WorkflowRuntime.GetWorkflow(instanceId);

                    workflowInstance.Abort();

                    if (_resourceLocker.Resources.ExceptionFromWorkflow.TryRemove(Thread.CurrentThread.ManagedThreadId, out var exception))
                    {
                        throw exception;
                    }
                }
            }
        }