Skip to content

Commit 9ef7a39

Browse files
committed
Make Actor.AskOnce & Actor.AskOnceWithTimeout isolated.(No more if timeout == nil codes)
1 parent a463600 commit 9ef7a39

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,10 @@ timeout = 10 * time.Millisecond
338338

339339
// Normal cases
340340
// Result would be 10
341-
actual, _ = AskNewGenerics[interface{}, int](1).AskOnce(actorRoot, nil)
341+
actual, _ = AskNewGenerics[interface{}, int](1).AskOnce(actorRoot)
342342
// Ask with Timeout
343343
// Result would be 20
344-
actual, _ = AskNewGenerics[interface{}, int](2).AskOnce(actorRoot, &timeout)
344+
actual, _ = AskNewGenerics[interface{}, int](2).AskOnceWithTimeout(actorRoot, timeout)
345345
// Ask channel
346346
// Result would be 30
347347
ch := AskNewGenerics[interface{}, int](3).AskChannel(actorRoot)
@@ -350,7 +350,7 @@ close(ch)
350350

351351
// Timeout cases
352352
// Result would be 0 (zero value, timeout)
353-
actual, err = AskNewGenerics[interface{}, int](-1).AskOnce(actorRoot, &timeout)
353+
actual, err = AskNewGenerics[interface{}, int](-1).AskOnceWithTimeout(actorRoot, timeout)
354354
```
355355

356356
## Compose

actor.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,19 +156,23 @@ func AskNewByOptionsGenerics[T any, R any](message T, ioCh chan R) *AskDef[T, R]
156156
}
157157

158158
// AskOnce Sender Ask
159-
func (askSelf *AskDef[T, R]) AskOnce(target ActorHandle[interface{}], timeout *time.Duration) (R, error) {
159+
func (askSelf *AskDef[T, R]) AskOnce(target ActorHandle[interface{}]) (R, error) {
160160
ch := askSelf.AskChannel(target)
161161
defer close(ch)
162-
var result R
163162
// var err error
164-
if timeout == nil {
165-
result = <-ch
166-
} else {
167-
select {
168-
case result = <-ch:
169-
case <-time.After(*timeout):
170-
return result, ErrActorAskTimeout
171-
}
163+
164+
return <-ch, nil
165+
}
166+
167+
// AskOnceWithTimeout Sender Ask with timeout
168+
func (askSelf *AskDef[T, R]) AskOnceWithTimeout(target ActorHandle[interface{}], timeout time.Duration) (R, error) {
169+
ch := askSelf.AskChannel(target)
170+
defer close(ch)
171+
var result R
172+
select {
173+
case result = <-ch:
174+
case <-time.After(timeout):
175+
return result, ErrActorAskTimeout
172176
}
173177

174178
return result, nil

actor_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ func TestActorAsk(t *testing.T) {
112112

113113
// Normal cases
114114
expectedInt = 10
115-
actual, _ = AskNewGenerics[interface{}, int](1).AskOnce(actorRoot, nil)
115+
actual, _ = AskNewGenerics[interface{}, int](1).AskOnce(actorRoot)
116116
assert.Equal(t, expectedInt, actual)
117117
// Ask with Timeout
118118
expectedInt = 20
119-
actual, _ = AskNewGenerics[interface{}, int](2).AskOnce(actorRoot, &timeout)
119+
actual, _ = AskNewGenerics[interface{}, int](2).AskOnceWithTimeout(actorRoot, timeout)
120120
assert.Equal(t, expectedInt, actual)
121121
// Ask channel
122122
expectedInt = 30
@@ -127,7 +127,7 @@ func TestActorAsk(t *testing.T) {
127127

128128
// Timeout cases
129129
expectedInt = 0
130-
actual, err = AskNewGenerics[interface{}, int](-1).AskOnce(actorRoot, &timeout)
130+
actual, err = AskNewGenerics[interface{}, int](-1).AskOnceWithTimeout(actorRoot, timeout)
131131
assert.Equal(t, expectedInt, actual)
132132
assert.Equal(t, ErrActorAskTimeout, err)
133133
}

0 commit comments

Comments
 (0)