Вопрос

Можно ли в бизнес-процессе асинхронно вызывать асинхронные методы?

Скажем, есть асинхронный метод в разделе Methods, ну или в пакете сервис с ними лежит. И надо это как-то вызвать внутри бизнес-процесса в блоке ScriptTask, но ведь, если я правильно понимаю, код внутри этого скрипт таска идёт в ScriptTask1Execute(), а тот в свою очередь синхронный и повлиять на это никак нельзя. Всё правильно или я что-то не так понимаю?

Нравится

2 комментария

Добрый день!

Рекомендую вам в БП вместо ScriptTask вызвать элементом подпроцесс, который будет фоновым и он выполнится в параллельном потоке.

В систетеме стоит использовать фоновые процессы и с процесса вызвать подпроцесс фоновый. Статьи про фоновые процессы, в которых есть примеры кода для реализации вашей задачи:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/back-end-development/data-operations-back-end/execute-operations-in-the-background/overview

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/back-end-development/data-operations-back-end/execute-operations-in-the-background/examples/register-a-background-operation

Anhelina,



Добрый день! Прочитал статьи, но что-то не совсем понял, как там с асинхронным кодом работать. Метод Run(), что находится внутри IBackgroundTask, ведь синхронный. Единственный способ, что я вижу, чтобы в нём был асинхронный код - это вызывать его синхронно, условно

 

public void Run(UsrActivityData data) {
        var task = DoSmthAsync();
        task.Wait();
        return task.Result;
}

Я для решения своей задачи изначально планировал просто сделать отдельный класс с синхронными методами(которые будут вызываться из СкриптТаска), где точно так же, как на моём примере выше, будут вызываться нужные мне асинхронные. Но это в любом случае вызов аснхронного из синхронного, что плохо и что я пытаюсь понять, можно ли избежать. Здесь есть какое-то преимущество при использовании IBackgroundTask или я не так понял, как им пользоваться?

Показать все комментарии