Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435
  1. package common
  2. import "net/http"
  3. type JobResult struct {
  4. Res *http.Response
  5. Err error
  6. ReqData interface{} // job.data
  7. }
  8. type job struct {
  9. req *http.Request
  10. c chan JobResult
  11. data interface{}
  12. }
  13. var jobs = make(chan job)
  14. func InitAsyncHTTP(nWorkers uint) {
  15. for i := uint(0); i < nWorkers; i++ {
  16. go asyncHTTPWorker()
  17. }
  18. }
  19. func DoAsyncHTTP(r *http.Request, c chan JobResult, data interface{}) {
  20. jobs <- job{r, c, data}
  21. }
  22. func asyncHTTPWorker() {
  23. for {
  24. job := <-jobs
  25. res, err := Client.Do(job.req)
  26. job.c <- JobResult{res, err, job.data}
  27. }
  28. }