2
0

HttpPool.dpr 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. program HttpPool;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. Classes,
  6. System.SysUtils,
  7. System.Net.HttpClient,
  8. Quick.Commons,
  9. Quick.Console,
  10. Quick.Threads,
  11. Quick.Pooling;
  12. var
  13. pool : IObjectPool<THTTPClient>;
  14. tasks : TBackgroundTasks;
  15. i : Integer;
  16. begin
  17. try
  18. ReportMemoryLeaksOnShutdown := True;
  19. pool := TObjectPool<THTTPClient>.Create(5,5000,procedure(var aInstance : THTTPClient)
  20. begin
  21. aInstance := THTTPClient.Create;
  22. end);
  23. tasks := TBackgroundTasks.Create(20);
  24. for i := 0 to 100 do
  25. begin
  26. tasks.AddTask(procedure(task : ITask)
  27. var
  28. httpcli : THTTPClient;
  29. statuscode : Integer;
  30. poolitem : IPoolItem<THTTPClient>;
  31. begin
  32. poolitem := pool.Get;
  33. cout('Got connection pool: %d',[poolitem.ItemIndex],etInfo);
  34. httpcli := poolitem.Item;
  35. statuscode := httpcli.Get('http://www.google.com').StatusCode;
  36. if statuscode = 200 then cout('Download ok',etSuccess);
  37. //Sleep(Random(2000));
  38. cout(statuscode.ToString,etInfo);
  39. end).Run;
  40. end;
  41. tasks.Start;
  42. ConsoleWaitForEnterKey;
  43. tasks.Free;
  44. except
  45. on E: Exception do
  46. Writeln(E.ClassName, ': ', E.Message);
  47. end;
  48. end.