如何为Parallel.Async后台任务设置更高的任务优先级?

时间:2016-12-31 08:50:22

标签: delphi delphi-10.1-berlin omnithreadlibrary

我需要为Parallel.Async后台任务分配更高的任务优先级。由于OmniThreadLibrary具有SetPriority:如何为此Parallel.Async任务设置特定优先级?

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;

1 个答案:

答案 0 :(得分:1)

替换

Parallel.TaskConfig.OnTerminated(...

例如

Parallel.TaskConfig.SetPriority(tpAboveNormal).OnTerminated(...

优先级的可能值为

tpIdle, tpLowest, tpBelowNormal, tpNormal, tpAboveNormal, tpHighest

请注意,这只会影响进程中线程的优先级,并且不会为进程本身提供更高的优先级。有关详细信息,请参阅SetThreadPriority函数的文档。