From: qydysky Date: Wed, 4 Oct 2023 08:10:29 +0000 (+0800) Subject: 1 X-Git-Tag: v0.28.0+20231004d38344b X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=d38344b7bda85de1706d87467e57e8f570ca5714;p=part%2F.git 1 --- diff --git a/reqf/Reqf.go b/reqf/Reqf.go index 3dacd12..243504e 100644 --- a/reqf/Reqf.go +++ b/reqf/Reqf.go @@ -62,7 +62,6 @@ const ( var ( ErrEmptyUrl = errors.New("ErrEmptyUrl") - ErrMustAsync = errors.New("ErrMustAsync") ErrCantRetry = errors.New("ErrCantRetry") ErrNewRequest = errors.New("ErrNewRequest") ErrClientDo = errors.New("ErrClientDo") @@ -104,22 +103,21 @@ func (t *Req) Reqf(val Rval) error { if !val.Async { // 同步 - return t.reqfM(pctx, cancelF, val) + t.reqfM(pctx, cancelF, val) + return t.err } else { //异步 - go func() { - _ = t.reqfM(pctx, cancelF, val) - }() + go t.reqfM(pctx, cancelF, val) } return nil } -func (t *Req) reqfM(ctx context.Context, cancel context.CancelFunc, val Rval) error { +func (t *Req) reqfM(ctxMain context.Context, cancelMain context.CancelFunc, val Rval) { beginTime := time.Now() for i := 0; i <= val.Retry; i++ { - ctx, cancel := t.prepareRes(ctx, &val) + ctx, cancel := t.prepareRes(ctxMain, &val) t.err = t.reqf(ctx, val) cancel() if t.err == nil || IsCancel(t.err) { @@ -130,12 +128,11 @@ func (t *Req) reqfM(ctx context.Context, cancel context.CancelFunc, val Rval) er } } - cancel() + cancelMain() t.updateUseDur(beginTime) t.clean(&val) t.state.Store(free) t.l.Unlock() - return t.err } func (t *Req) reqf(ctx context.Context, val Rval) (err error) { @@ -173,12 +170,10 @@ func (t *Req) reqf(ctx context.Context, val Rval) (err error) { if val.Retry != 0 && val.RawPipe != nil { return ErrCantRetry } - if val.SaveToPipe != nil && !val.Async { - return ErrMustAsync - } if val.RawPipe != nil { body = val.RawPipe } + if len(val.PostStr) > 0 { body = strings.NewReader(val.PostStr) if _, ok := Header["Content-Type"]; !ok { @@ -282,12 +277,12 @@ func (t *Req) reqf(ctx context.Context, val Rval) (err error) { } err = errors.Join(err, pio.WithCtxCopy(req.Context(), t.callTree, t.copyResBuf[:], time.Duration(int(time.Millisecond)*writeLoopTO), io.MultiWriter(ws...), resReadCloser, panicf)) - resp.Body.Close() - if t.responBuf != nil { t.Respon = t.responBuf.Bytes() } + resReadCloser.Close() + return } diff --git a/reqf/Reqf_test.go b/reqf/Reqf_test.go index b5d58ad..5cf13a1 100644 --- a/reqf/Reqf_test.go +++ b/reqf/Reqf_test.go @@ -413,14 +413,16 @@ func Test_req3(t *testing.T) { go func() { d, _ := io.ReadAll(rc) if !bytes.Equal(d, []byte("abc强强强强")) { - t.Error("flate fail") + t.Error("flate fail", d) } close(c) }() - r.Reqf(Rval{ + if e := r.Reqf(Rval{ Url: "http://" + addr + "/flate", SaveToPipe: &pio.IOpipe{R: rc, W: wc}, - }) + }); e != nil { + t.Error(e) + } <-c } {