私はDelphiで紺碧に+100ファイルをアップロードしようとしました。しかし、呼び出しはメインスレッドをブロックするので、非同期呼び出しまたはバックグラウンドスレッドを使用してこれを実行します。DelphiやOmniThreadを使用して背景を紺色にアップロードする方法はありますか?
これは私が今何をすべきかです(のようなexplained here):
procedure TCloudManager.UploadTask(const input: TOmniValue;
var output: TOmniValue);
var
FileTask:TFileTask;
begin
FileTask := input.AsRecord<TFileTask>;
Upload(FileTask.BaseFolder, FileTask.LocalFile, FileTask.CloudFile);
end;
function TCloudManager.MassiveUpload(const BaseFolder: String;
Files: TDictionary<String, String>): TStringList;
var
pipeline: IOmniPipeline;
FileInfo : TPair<String,String>;
FileTask:TFileTask;
begin
// set up pipeline
pipeline := Parallel.Pipeline
.Stage(UploadTask)
.NumTasks(Environment.Process.Affinity.Count * 2)
.Run;
// insert URLs to be retrieved
for FileInfo in Files do
begin
FileTask.LocalFile := FileInfo.Key;
FileTask.CloudFile := FileInfo.Value;
FileTask.BaseFolder := BaseFolder;
pipeline.Input.Add(TOmniValue.FromRecord(FileTask));
end;//for
pipeline.Input.CompleteAdding;
// wait for pipeline to complete
pipeline.WaitFor(INFINITE);
end;
しかし、このブロックはあまりにも(私はなぜ理解していません?)。
ここにお会いできて嬉しいです。パイプラインはこれに適したツールですか? – mamcx
本当にありません。私はParallel.ForEachをやるだけです。 – gabr
私はParallel.ForEachでも試してみましたが、Application.ProcessMessages()を挿入する必要があり、流動的ではありませんでした。おそらくライブラリの使用の私の不足のために... – mamcx