Короче говоря, 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
ОтветитьУдалитьОшибка в названии