我需要为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;
答案 0 :(得分:1)
替换
Parallel.TaskConfig.OnTerminated(...
例如
Parallel.TaskConfig.SetPriority(tpAboveNormal).OnTerminated(...
优先级的可能值为
tpIdle, tpLowest, tpBelowNormal, tpNormal, tpAboveNormal, tpHighest
请注意,这只会影响进程中线程的优先级,并且不会为进程本身提供更高的优先级。有关详细信息,请参阅SetThreadPriority函数的文档。