2

Как я могу полностью завершить этот фоновый поток из основного потока, то есть не будет выполнен даже код в OnTerminated?Как полностью завершить параллельную задачу из основного потока?

uses 
    CodeSiteLogging, 
    OtlParallel, OtlTaskControl, OtlTask; 

procedure TForm2.btnParallelAsyncClick(Sender: TObject); 
begin 
    CodeSite.Send('btnParallelAsyncClick 1'); 

    Parallel.Async(
    procedure(const task: IOmniTask) 
    var 
     a: Integer; 
    begin 
     // executed in background thread: 
     a := 1 + 1; 
     Sleep(2000); 
     CodeSite.Send('Executed in Async Thread', a); 

     task.Invoke(// used to execute code in main thread 
     procedure 
     begin 
      CodeSite.Send('task.Invoke executed in main thread', a); 
     end); 

     Sleep(2000); 
     CodeSite.Send('Again executed in Async Thread', a); 
    end, 
    Parallel.TaskConfig.OnTerminated(
    procedure(const task: IOmniTaskControl) 
    begin 
     // executed in main thread: 
     CodeSite.Send('After background thread termination: Executed in Main Thread'); 
    end 
    ) 
    ); 

    CodeSite.Send('btnParallelAsyncClick 2'); 
end; 
+0

Это будет один из тех вопросов, когда вы хотите прекратить задачу без своего сотрудничества? –

ответ

3

Вы не можете этого сделать (кроме убийства нити, но, пожалуйста, не делайте этого).

Добавить глобальный флаг shouldSkipTerminate, установите его false перед созданием задачи, установите его в true, прежде чем завершить задание и проверить, если этот флаг установлен в OnTerminated.

+0

Спасибо, Габриэль. Я пробовал это, но он, похоже, не работает: http://i.imgur.com/Xam1273.png – user1580348

+0

Это работает: http://i.imgur.com/UnhfHDZ.png Но это кажется быть примитивным решением. Разве не удается активно прервать поток «Async» с чем-то вроде «task.Terminate», который не работает для меня в приведенном выше примере? – user1580348

+3

@ пользователь1580348 нет. «Terminate» просто сигнализирует, что задача перестает работать, но сама задача должна взаимодействовать, выйдя из себя, когда сигнализируется. –

 Смежные вопросы

  • Нет связанных вопросов^_^