1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- program HttpPool;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- Classes,
- System.SysUtils,
- System.Net.HttpClient,
- Quick.Commons,
- Quick.Console,
- Quick.Threads,
- Quick.Pooling;
- var
- pool : IObjectPool<THTTPClient>;
- tasks : TBackgroundTasks;
- i : Integer;
- begin
- try
- ReportMemoryLeaksOnShutdown := True;
- pool := TObjectPool<THTTPClient>.Create(5,5000,procedure(var aInstance : THTTPClient)
- begin
- aInstance := THTTPClient.Create;
- end);
- tasks := TBackgroundTasks.Create(20);
- for i := 0 to 100 do
- begin
- tasks.AddTask(procedure(task : ITask)
- var
- httpcli : THTTPClient;
- statuscode : Integer;
- poolitem : IPoolItem<THTTPClient>;
- begin
- poolitem := pool.Get;
- cout('Got connection pool: %d',[poolitem.ItemIndex],etInfo);
- httpcli := poolitem.Item;
- statuscode := httpcli.Get('http://www.google.com').StatusCode;
- if statuscode = 200 then cout('Download ok',etSuccess);
- //Sleep(Random(2000));
- cout(statuscode.ToString,etInfo);
- end).Run;
- end;
- tasks.Start;
- ConsoleWaitForEnterKey;
- tasks.Free;
- except
- on E: Exception do
- Writeln(E.ClassName, ': ', E.Message);
- end;
- end.
|