実行中の未処理の例外IOmniParallelTask
は、(ドキュメントを理解しているように) OTL によってキャッチされ、インスタンスにアタッチされ、 fromIOmniTaskControl
によってアクセスされる可能性があります。termination handler
IOmniTaskConfig
IOmniParallelTask
したがって、次のようにインスタンスを設定した後termination handler
:
fTask := Parallel.ParallelTask.NoWait.NumTasks(1);
fTask.OnStop(HandleOnTaskStop);
fTask.TaskConfig(Parallel.TaskConfig.OnTerminated(HandleOnTaskThreadTerminated));
fTask.Execute(TaskToExecute);
内の未処理の例外TaskToExecute
:
procedure TFormMain.TaskToExecute;
begin
Winapi.Windows.Sleep(2000);
raise Exception.Create('async operation exeption');
end;
IOmniTaskControl
内で取得したインスタンスにアタッチする必要がありtermination handler
ます。
procedure TFormMain.HandleOnTaskThreadTerminated(const task: IOmniTaskControl);
begin
if not Assigned(task.FatalException) then
Exit;
memo.Lines.Add('an exception occured: ' + task.FatalException.Message);
end;
この時点での問題は、例外が割り当てられておらず、そのIOmniTaskControl.FatalException
理由がわからないことです。
たぶん、あなたの何人かは私が間違っていることについていくつかの考えを持っています. VCL サンプルプロジェクト全体は、https ://github.com/stackoverflow-samples/OTLTaskException にあります。