Browse Source

功能优化

pengcheng
Sydonian 6 months ago
parent
commit
1df1ee6660
4 changed files with 23 additions and 5 deletions
  1. +5
    -1
      pkgs/future/future.go
  2. +1
    -1
      pkgs/future/ready.go
  3. +16
    -2
      pkgs/future/set_value_future.go
  4. +1
    -1
      pkgs/future/set_void_future.go

+ 5
- 1
pkgs/future/future.go View File

@@ -5,7 +5,11 @@ import (
"fmt"
)

var ErrCompleted = fmt.Errorf("context canceled")
var ErrConsumed = fmt.Errorf("future already consumed")

var ErrNotComplete = fmt.Errorf("future not complete")

var ErrCanceled = context.Canceled

type Future interface {
IsComplete() bool


+ 1
- 1
pkgs/future/ready.go View File

@@ -24,7 +24,7 @@ func (f *Ready) Wait(ctx context.Context) error {
select {
case v, ok := <-f.ch:
if !ok {
return ErrCompleted
return ErrConsumed
}
return v



+ 16
- 2
pkgs/future/set_value_future.go View File

@@ -63,7 +63,7 @@ func (f *SetValueFuture[T]) Wait(ctx context.Context) (T, error) {
case cv, ok := <-f.ch:
if !ok {
var ret T
return ret, cv.Err
return ret, ErrConsumed
}
return cv.Value, cv.Err

@@ -73,6 +73,20 @@ func (f *SetValueFuture[T]) Wait(ctx context.Context) (T, error) {
}
}

func (f *SetValueFuture[T]) TryGetValue() (T, error) {
select {
case cv, ok := <-f.ch:
if !ok {
var ret T
return ret, ErrConsumed
}
return cv.Value, cv.Err
default:
var ret T
return ret, ErrNotComplete
}
}

type SetValueFuture2[T1 any, T2 any] struct {
isCompleted bool
ch chan ChanValue2[T1, T2]
@@ -126,7 +140,7 @@ func (f *SetValueFuture2[T1, T2]) Wait(ctx context.Context) (T1, T2, error) {
select {
case cv, ok := <-f.ch:
if !ok {
return cv.Value1, cv.Value2, cv.Err
return cv.Value1, cv.Value2, ErrConsumed
}
return cv.Value1, cv.Value2, cv.Err



+ 1
- 1
pkgs/future/set_void_future.go View File

@@ -41,7 +41,7 @@ func (f *SetVoidFuture) Wait(ctx context.Context) error {
select {
case v, ok := <-f.ch:
if !ok {
return ErrCompleted
return ErrConsumed
}
return v



Loading…
Cancel
Save