Кажется, что поток предназначен для линейного выполнения, но я хотел бы создать поток с помощью построителя потока, который выполняет несколько действий параллельно. Возможно ли это, и если нет, есть ли хороший обходной путь?

0
user73893 19 Мар 2020 в 09:25
Попробуйте использовать вершину очереди или пакетный контекст
 – 
Abhijith E
19 Мар 2020 в 10:47
3
Транзакция в Salesforce всегда выполняется линейно, включая Apex, потоки, правила рабочего процесса и т. д. Параллельные задачи в одной транзакции невозможны, включая потоки. Каким будет ваш вариант использования?
 – 
sfdcfox
19 Мар 2020 в 11:01
Мой вариант использования заключается в том, что мне нужно сделать некоторые выноски, а также запустить подпоток с элементом паузы, который будет ожидать событий платформы, которые публикуются, когда данные возвращаются из каждого из выносок.
 – 
user73893
19 Мар 2020 в 12:04

1 ответ

Лучший ответ

Как сказал @sfdcfox в своем комментарии, вы не можете выполнять что-либо из транзакции в Salesforce параллельно — транзакция (синхронное или асинхронное выполнение запроса в вашей организации) является однопоточным, и нет механизма для создания дополнительных потоков.

Единственная возможность выполнять вещи параллельно — это инициировать несколько синхронных или асинхронных транзакций из-за пределов организации (или для асинхронных транзакций — из существующей транзакции внутри организации).

Одним из способов сделать это без необходимости использования какой-либо дополнительной серверной инфраструктуры является использование JavaScript из пользовательского интерфейса с использованием (небуферизованного) удаленного взаимодействия Visualforce или тщательно организованных императивных вызовов Apex из вызовов LWC/контроллера из Aura, поскольку технология браузера поддерживает несколько параллельных вызовов AJAX к данный хост (ваша организация Salesforce).

Взгляните на этот ответ, если вы заинтересованы в подходе LWC.

Использование нескольких Queueables и/или пакетов также может дать вам нечто подобное.

Реализация продолжения после того, как все параллельные выполнения завершены, также может быть несколько запутанной, но в меньшей степени с точки зрения клиентской стороны, где клиент лучше может отслеживать незавершенные транзакции, относящиеся к одному общему процессу.

3
Phil W 19 Мар 2020 в 12:14