From b9f4f45ed8755a8802d695f7aef62c9f78ead684 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Fri, 10 Jan 2025 11:32:53 +1000 Subject: [PATCH] =?UTF-8?q?1.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE=20=D0=BE=D0=B1=D0=B5=D1=89=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B1=D1=83=D0=B4=D0=B5=D1=82=20=D0=B4=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC=20(=D0=B2=D0=BB=D0=B8?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D0=BD=D0=B0=20=D1=81=D0=BE=D0=BE=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B9=20=D1=84=D0=BB=D0=B0=D0=B3=20=D0=BF=D1=80=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B5=20=D0=A4=D0=97)=202.=20?= =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D0=B7=20=D0=BE=D1=82=20=D0=92=D1=8B?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D0=BB=D0=B8=D1=82=D1=8C=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=20=D1=80=D0=B5=D1=84=D0=BB=D0=B5?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D0=B8=203.=20=D0=98=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B1=D1=80=D0=BE?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=B8=D0=B7=20=D0=A4?= =?UTF-8?q?=D0=97=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B1=D1=80=D0=B0=D1=81=D1=8B=D0=B2=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BA=D0=B0=D0=BA=20=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8C,=20=D0=B0=20=D0=BD=D0=B5=20=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=20=D0=BF=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- ...5\321\211\320\260\320\275\320\270\321\217.os" | 8 +++++++- ...5\321\211\320\260\320\275\320\270\320\265.os" | 11 ++++++----- ...6\320\265\320\261\320\275\321\213\320\271.os" | 6 ++++-- ...5\321\211\320\260\320\275\320\270\321\217.os" | 16 +++++++++------- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/packagedef b/packagedef index af1347b..10b0c02 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("async") - .Версия("0.2.1") + .Версия("0.3.0") .Автор("Кирилл Черненко") .АдресАвтора("https://github.com/sfaqer") .Описание("Фреймворк асинхронного исполнения для OneScript") diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" index 40b9817..35ab24d 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" @@ -4,12 +4,13 @@ Перем Параметры; // Параметры алгоритма Перем Предыдущий; // Предыдущее обещание результат которого передаётся как параметр в алгоритм Перем ПерехватчикИсключения; // Это обещание перехватчик исключения +Перем Длительное; // Это длительное обещание #КонецОбласти #Область СлужебныеПроцедурыИФункции -Процедура ПриСозданииОбъекта(пАлгоритм, пПараметры, пПерехватчикИсключения) +Процедура ПриСозданииОбъекта(пАлгоритм, пПараметры, пПерехватчикИсключения, пДлительное) Если ТипЗнч(пПараметры) = Тип("Обещание") Тогда Предыдущий = пПараметры; @@ -19,6 +20,7 @@ Алгоритм = пАлгоритм; ПерехватчикИсключения = пПерехватчикИсключения; + Длительное = пДлительное; КонецПроцедуры @@ -42,4 +44,8 @@ Возврат ПерехватчикИсключения; КонецФункции +Функция Длительное() Экспорт + Возврат Длительное; +КонецФункции + #КонецОбласти diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\320\265.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\320\265.os" index a81d616..b7c972c 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\320\265.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\320\265.os" @@ -29,7 +29,7 @@ ИначеЕсли Не Дождались Тогда ВызватьИсключение "Превышено время ожидания получения результата"; Иначе - ВызватьИсключение ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке); + ВызватьИсключение Задание.ИнформацияОбОшибке; КонецЕсли; КонецФункции @@ -56,7 +56,7 @@ КонецЕсли; - Результат = Новый Обещание(Алгоритм, ЭтотОбъект); + Результат = Новый Обещание(Алгоритм, ЭтотОбъект, , КонтекстВыполнения.Длительное()); ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат); @@ -86,7 +86,7 @@ КонецЕсли; - Результат = Новый Обещание(Алгоритм, ЭтотОбъект, Истина); + Результат = Новый Обещание(Алгоритм, ЭтотОбъект, Истина, КонтекстВыполнения.Длительное()); ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат); @@ -113,12 +113,13 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПриСозданииОбъекта(Алгоритм, Параметры, ПерехватчикИсключения = Ложь) +Процедура ПриСозданииОбъекта(Алгоритм, Параметры, ПерехватчикИсключения = Ложь, Длительное = Ложь) КонтекстВыполнения = Новый КонтекстВыполненияОбещания( Алгоритм, Параметры, - ПерехватчикИсключения + ПерехватчикИсключения, + Длительное ); КонецПроцедуры diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index ea4feaf..1d234b1 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -13,7 +13,9 @@ Параметры = Новый Массив; Параметры.Добавить(Обещание); - Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВыполнитьОбещание", Параметры); + Длительное = Рефлектор.ПолучитьСвойство(Обещание, "КонтекстВыполнения").Длительное(); + + Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВыполнитьОбещание", Параметры, Длительное); Рефлектор.УстановитьСвойство(Обещание, "Задание", Задание); @@ -57,7 +59,7 @@ СтрокаПараметров.Добавить(СтрШаблон("Параметры[%1]", Счетчик)); КонецЦикла; - Возврат Вычислить(СтрШаблон("Контекст.Алгоритм().Выполнить(%1)", СтрСоединить(СтрокаПараметров, ","))); + Возврат Рефлектор.ВызватьМетод(Контекст.Алгоритм(), "Выполнить", Параметры); КонецЕсли; diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" index cbc2ce2..c1a094e 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\320\265\321\211\320\260\320\275\320\270\321\217.os" @@ -6,20 +6,21 @@ // Выполняет асинхронно переданную лямбду // // Параметры: -// Алгоритм - Строка - Лямбда выражение которое требуется исполнить -// Объект - Сценарий - Объект который необходимо захватить в лямбду -// Параметры - Массив из Произвольный - Параметры алгоритма +// Алгоритм - Строка - Лямбда выражение которое требуется исполнить +// Объект - Сценарий - Объект который необходимо захватить в лямбду +// Параметры - Массив из Произвольный - Параметры алгоритма +// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток // // Возвращаемое значение: // Обещание - Обещание о выполнении переданного алгоритма // -Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры) Экспорт +Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры, Длительное = Ложь) Экспорт Алгоритм = Лямбда.Выражение(Алгоритм) .ЗахватитьОбъект(Объект) .ВДействие(); - Результат = Новый Обещание(Алгоритм, Параметры); + Результат = Новый Обещание(Алгоритм, Параметры, , Длительное); ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат); @@ -32,13 +33,14 @@ // Параметры: // Действие - Действие - Делегат на метод который требуется исполнить // Параметры - Массив из Произвольный - Параметры метода +// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток // // Возвращаемое значение: // Обещание - Обещание о выполнении переданного метода // -Функция ВыполнитьДелегат(Действие, Параметры) Экспорт +Функция ВыполнитьДелегат(Действие, Параметры, Длительное = Ложь) Экспорт - Результат = Новый Обещание(Действие, Параметры); + Результат = Новый Обещание(Действие, Параметры, , Длительное); ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);