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 @@ // Параметры: // Действие - Действие - Делегат на метод который требуется исполнить // Параметры - Массив из Произвольный - Параметры метода +// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток // // Возвращаемое значение: // Обещание - Обещание о выполнении переданного метода // -Функция ВыполнитьДелегат(Действие, Параметры) Экспорт +Функция ВыполнитьДелегат(Действие, Параметры, Длительное = Ложь) Экспорт - Результат = Новый Обещание(Действие, Параметры); + Результат = Новый Обещание(Действие, Параметры, , Длительное); ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);