29.06.2022, 14:36 | #1 |
Участник
|
Распараллеливание процессов и обмен инфомацией между ними D365
Есть такая задача
Чувак жмет кнопку на форме. Далее 1. Запуск мега проверки с каким то расчетом 2. Диалог без каких то сильных опций (только комментарий) чтобы юзер подтвердил свое решение 3. Долгий процесс только после расчета из пункта 1 и возможно использующий информацию из него Хочется ускорить работу для чего вынести в параллель 1 и 3 Но как потоку 3 понять что поток 1 все и снять информацию с него? Юзаю runAsync Последний раз редактировалось axm2017; 29.06.2022 в 15:12. |
|
29.06.2022, 15:29 | #2 |
Moderator
|
runAsync() возвращает объект типа System.Threading.Tasks.Task, у которого есть метод wait(). Так что можно логику из пункт 3 засунуть в основной класс (типа runBaseBatch), в начале исполнения заспавнить через runAsync логику из пункта 1, потом вывести диалог и потом, когда пользователь чего-то ответил, вызвать wait() для того объекта, который когда-то вернули из runAsync(). Ну и после этого запускать рассчетную логику из пункта 3.
Хотя я бы скорее batch multithreading попробовал бы использовать. Диалог запустить из класса-стартера, потом когда пользователь ответит - заспавнить три батча - один для 1, второй для той части 3, которая от 1 не зависит и третий для той части 3, которая от 1 зависит. При этом для третьего батча прописать зависимости от первых двух. |
|
|
За это сообщение автора поблагодарили: axm2017 (5), gl00mie (3). |
30.06.2022, 05:17 | #3 |
Участник
|
пиши из 1 в табличку, а из 3 проверяй её время от времени
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: axm2017 (5), ТРЕНЕР (2). |
|
|