Tôi đã cố gắng tải lên +100 tệp để cộng với Delphi. Tuy nhiên, các cuộc gọi chặn chủ đề chính, vì vậy tôi muốn làm điều này với một cuộc gọi không đồng bộ hoặc với một chủ đề nền.Cách tải tệp lên azure trong nền với Delphi và OmniThread?
Đây là những gì tôi làm bây giờ (như 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;
Tuy nhiên khối này quá (tại sao tôi không hiểu?).
Rất vui được gặp bạn ở đây. Là đường ống đúng công cụ cho điều này? – mamcx
Không thực sự. Tôi sẽ chỉ làm một Parallel.ForEach. – gabr
Tôi cũng thử với Parallel.ForEach, nhưng tôi cần phải chèn Application.ProcessMessages() và không phải là chất lỏng. Có lẽ vì sự thiếu hiểu biết của tôi về việc sử dụng thư viện ... – mamcx