# Реализация обработки длительной операции в задаче

Для обработки длительных операций в системе, когда использование блока "Скрипт" приводит к таймауту и срыву процесса, можно использовать следующий метод. При этом в самой задаче будет отображаться прогресс обработки, на время обработки кнопки переходов будут скрыты.

<p class="callout warning">Внутри обработчика нельзя использовать **context**. Вместо этого использовать **model.Context**.</p>

```C#
public override void OnTaskCreate(ITaskBase task, P_IA_AandP context)
{
	// 4f55dd98-5242-4633-88e8-4c745551b52c - Id задачи на диаграмме 
	WorkflowHelper.ProcessLongAction(new Guid("4f55dd98-5242-4633-88e8-4c745551b52c"), task, (model, session) =>
	{
		model.Name = "Сбор данных по активным задачам"; // Название операции, отображаемое в задаче
      
		// Здесь любой код для длительных операций
      	var instanceContext = model.Context as P_IA_AandP;
    });
}
```

В ELMA4 изменена сигнатура вызова метода - дополнительно передается тип контекста:

```c#
public override void OnTaskCreate(ITaskBase task, P_IA_AandP context)
{
	// 4f55dd98-5242-4633-88e8-4c745551b52c - Id задачи на диаграмме 
	WorkflowHelper.ProcessLongAction<P_IA_AandP>(new Guid("4f55dd98-5242-4633-88e8-4c745551b52c"), task, (model, session) =>
	{
		model.Name = "Сбор данных по активным задачам"; // Название операции, отображаемое в задаче
      
		// Здесь любой код для длительных операций
            
      	var instanceContextVar1 = model.Context.Var1;
    });
}
```

<p class="callout info">После окончания длительной операции контекст процесса сохранять не нужно - это будет сделано автоматически, если были изменения.</p>

В результате при создании задачи запуститься в отдельном потоке обработка, кнопки переходов будут скрыты и будет отображена информация об операции со счетчиком времени выполнения. Например:

[![image-1630422165056.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/scaled-1680-/dfTqQbz7ac1KFkcB-image-1630422165056.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/dfTqQbz7ac1KFkcB-image-1630422165056.png)

После завершения длительно операции кнопки переходов вновь появятся и будет выдано сообщение со временем завершения выполнения указанной операции:

[![image-1630423575147.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/scaled-1680-/m4ScKjegHhuoWMxk-image-1630423575147.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/m4ScKjegHhuoWMxk-image-1630423575147.png)

Если в исполняемом коде будет вызвано исключение, то появится соответствующее сообщение, кнопки переходов так же появятся:

[![image-1630427822285.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/scaled-1680-/Z5jfGKLNsIHYJZZe-image-1630427822285.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-08/Z5jfGKLNsIHYJZZe-image-1630427822285.png)