Короче говоря, Parallel.Async принимает анонимные методы, обычный метод или процедуру (все они должны быть без параметров) и выполняет его в фоновом потоке. Вот и все чудеса. Для простых фоновых задач это уже подспорье. Отпадает нужда в вызове CreateTask.
Рассмотрим это на простейшем примере:
Parallel.Async(
procedure
begin
MessageBeep($FFFFFFFF);
end,
Для несколько более сложных сценариев, вы можете указать второй параметр, который является либо анонимным методом, обычным метод или процедурой (опять же без каких-либо параметров), которая будет выполнена после завершения выполнения фоновойзадачи. Это вторая часть кода выполняется в основном потоке программы, так что вы спокойно в данном коде можете взаимодействовать с VCL.procedure TfrmDemoParallelAsync.btnAsyncClick(Sender: TObject);
begin
btnAsync.Enabled := false;
Parallel.Async(
procedure
begin
// Запуск в параллельном потоке
Sleep(500);
MessageBeep($FFFFFFFF);
end,
// После завершения фоновой задачи выполняем этот анонимный метод
procedure
begin
// выполняем в основном потоке программы
btnAsync.Enabled := true;
end
);
end;
Просто и эффективно.Продолжение следует…
OmniThreadLibrary
ОтветитьУдалитьОшибка в названии