Фоновое выполнение операций позволяет в фоновом режиме выполнять операции, которые требуют длительного времени выполнения, без задержек в работе пользовательского интерфейса.
Для запуска фоновых операций в классе Terrasoft.Core.Tasks.Task реализованы методы StartNew() и StartNewWithUserConnection(). В качестве параметров методов можно использовать базовые типы данных в .NET (например, string, int, Guid и т. д.) или пользовательские типы. Отличие метода StartNewWithUserConnection() — запуск фоновой операции, которая требует использования пользовательского соединения UserConnection.
Параметры, которые принимаются фоновой операцией, преобразуются в массив байт с помощью модуля MessagePack-CSharp. Реализация модуля MessagePack-CSharp содержится на сайте GitHub. Если не удается сериализовать или десериализовать значение параметра, могут сгенерироваться исключения.
Действие асинхронной операции описывается в отдельном классе, который должен реализовать интерфейс IBackgroundTask<in TParameters>.
Если для выполнения действия требуется пользовательское соединение, то класс должен дополнительно реализовать интерфейс IUserConnectionRequired.
В классе, который реализует интерфейсы IBackgroundTask<in TParameters> и IUserConnectionRequired необходимо реализовать методы интерфейсов Run и SetUserConnection.
При реализации методов следует учесть:
- В метод Run не следует передавать UserConnection.
- В методе Run не следует вызывать метод SetUserConnection — ядро системы вызывает этот метод и инициализирует UserConnection при старте фоновой операции.
- В метод Run допустимо передавать структуры, состоящие только из простых типов данных. Если передавать сложные экземпляры классов, то с большой вероятностью произойдет ошибка сериализации парамеров.
1. Создать класс для объекта активности
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrActivityData".
- Заголовок (Title) — "ActivityData".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
- На панели инструментов дизайнера нажмите Сохранить (Save), а затем Опубликовать (Publish).
2. Создать класс для добавления активности
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
-
В дизайнере схем заполните свойства схемы:
- Код (Code) — "UsrBackgroundActivityCreator".
- Заголовок (Title) — "BackgroundActivityCreator".
Для применения заданных свойств нажмите Применить (Apply).
-
В дизайнере схем добавьте исходный код.
Класс UsrBackgroundActivityCreator реализует интерфейсы IBackgroundTask<UsrActivityData> и IUserConnectionRequired. В методе Run() после принудительной задержки в 30 секунд на основе предоставленного экземпляра UsrActivityData создается экземпляр объекта раздела Активности (Activities).
- На панели инструментов дизайнера нажмите Сохранить (Save), а затем Опубликовать (Publish).
3. Создать бизнес-процесс для запуска фоновой операции
- Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
-
На панели инструментов реестра раздела нажмите Добавить —> Бизнес процесс (Add —> Business process).
-
В дизайнере процессов заполните свойства процесса:
- На панели настройки элементов заполните свойство Заголовок (Title) — "Background Task Example Process".
- На вкладке Настройки (Settings) панели настройки элементов заполните свойство Имя (Code) — "UsrBackgroundTaskExampleProcess".
-
Реализуйте бизнес-процесс.
-
В области элементов дизайнера нажмите Действия системы (System actions и разместите элемент Задание-сценарий (Script task) в рабочей области дизайнера процессов между начальным событием Простое (Simple) и завершающим событием Останов (Terminate).
-
Элементу Задание-сценарий (Script task) добавьте имя "Создать фоновую операцию" ("Create background task").
-
Добавьте код элемента Задание-сценарий (Script task).
-
В дизайнере процессов на вкладке Методы (Methods) в блоке Usings нажмите кнопку и добавьте пространство имен Terrasoft.Configuration. Это необходимо для использования в бизнес-процессе реализации класса для объекта активности и класса для добавления активности.
-
- На панели инструментов дизайнера нажмите Сохранить (Save).
- Во всплывающем окне нажмите Опубликовать (Publish) для компиляции кода элемента Задание-сценарий (Script task).
Результат выполнения примера
Чтобы запустить бизнес-процесс Background Task Example Process, на панели инструментов дизайнера процессов нажмите Запустить (Run).
В результате выполнения бизнес-процесса Background Task Example Process в списочном представлении реестра раздела Активности (Activities) добавляется запись Activity created by background task.