Хочу поделится своим модулем, некой альтернативой TTask, которой я пользуюсь уже довольно продолжительное время. Возможно кому то будет полезно.
AsyncTask это глобальная функция в модуле, которая возвращает интерфейс IAsyncTask. По этой причине нет нужды специально создавать объект и заботится о его удалении.
Пример использования:
procedure GetAsyncRequest(const aUrl:string);varLResult:string;beginAsyncTask.Run(
procedure
begin// это основной метод потока, он не синхронизирован. От сюда нельзя обращатся к визуальным компонентам // или переменным вне функции без синхронизации (если необходимо)LResult:=HttpRequest.Get(aUrl);end,
procedure
begin// Эта процедура выполнится при успешном завершении потока (без exception). // Процедура синхронизированна, по этому тут можно обращатся к любым визуальным компонентамShowMessage(LResult);end,
procedure(E:Exception)begin// Эта процедура выполнится только если во время работы потока произошла ошибкаShowException(E);end,
procedure
begin// Эта процедура выполнится в любом случае (после завершения потока), в не зависимости была ошибка или нетShowMessage(LResult);end);// обратите внимание, что обязательно задать только первую процедуру, остальные можно не указывать или передать вместо них nil. Например так:AsyncTask.Run(
procedure
begin...end,nil,
procedure(E:Exception)beginShowException(E);end);
Вопрос
DirtyBorov
Хочу поделится своим модулем, некой альтернативой TTask, которой я пользуюсь уже довольно продолжительное время. Возможно кому то будет полезно.
AsyncTask это глобальная функция в модуле, которая возвращает интерфейс IAsyncTask. По этой причине нет нужды специально создавать объект и заботится о его удалении.
Пример использования:
Async.Task.pas.zip
Изменено пользователем DirtyBorovСсылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.