Skip to content

Commit 5a19220

Browse files
committed
Make Actor.AskOnce & Actor.AskOnceWithTimeout isolated.(No more if timeout == nil codes)
1 parent f2b7e93 commit 5a19220

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
@@ -313,12 +313,12 @@ timeout = 10 * time.Millisecond
313313

314314
// Normal cases
315315
// Result would be 10
316-
result, _ = Ask.New(1).AskOnce(actorRoot, nil)
316+
result = Ask.New(1).AskOnce(actorRoot)
317317
actual, _ = Maybe.Just(result).ToInt()
318318
assert.Equal(t, expectedInt, actual)
319319
// Ask with Timeout
320320
// Result would be 20
321-
result, _ = Ask.New(2).AskOnce(actorRoot, &timeout)
321+
result, _ = Ask.New(2).AskOnceWithTimeout(actorRoot, timeout)
322322
actual, _ = Maybe.Just(result).ToInt()
323323
// Ask channel
324324
// Result would be 30
@@ -328,7 +328,7 @@ close(ch)
328328

329329
// Timeout cases
330330
// Result would be 0 (zero value, timeout)
331-
result, err = Ask.New(-1).AskOnce(actorRoot, &timeout)
331+
result, err = Ask.New(-1).AskOnceWithTimeout(actorRoot, timeout)
332332
actual, _ = Maybe.Just(result).ToInt()
333333
```
334334

actor.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,19 +145,23 @@ func AskNewByOptionsGenerics(message interface{}, ioCh chan interface{}) *AskDef
145145
}
146146

147147
// AskOnce Sender Ask
148-
func (askSelf *AskDef) AskOnce(target ActorHandle, timeout *time.Duration) (interface{}, error) {
148+
func (askSelf *AskDef) AskOnce(target ActorHandle) interface{} {
149149
ch := askSelf.AskChannel(target)
150150
defer close(ch)
151-
var result interface{}
152151
// var err error
153-
if timeout == nil {
154-
result = <-ch
155-
} else {
156-
select {
157-
case result = <-ch:
158-
case <-time.After(*timeout):
159-
return result, ErrActorAskTimeout
160-
}
152+
153+
return <-ch
154+
}
155+
156+
// AskOnce Sender Ask with timeout
157+
func (askSelf *AskDef) AskOnceWithTimeout(target ActorHandle, timeout time.Duration) (interface{}, error) {
158+
ch := askSelf.AskChannel(target)
159+
defer close(ch)
160+
var result interface{}
161+
select {
162+
case result = <-ch:
163+
case <-time.After(timeout):
164+
return result, ErrActorAskTimeout
161165
}
162166

163167
return result, nil

actor_test.go

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

114114
// Normal cases
115115
expectedInt = 10
116-
result, _ = Ask.New(1).AskOnce(actorRoot, nil)
116+
result = Ask.New(1).AskOnce(actorRoot)
117117
actual, _ = Maybe.Just(result).ToInt()
118118
assert.Equal(t, expectedInt, actual)
119119
// Ask with Timeout
120120
expectedInt = 20
121-
result, _ = Ask.New(2).AskOnce(actorRoot, &timeout)
121+
result, _ = Ask.New(2).AskOnceWithTimeout(actorRoot, timeout)
122122
actual, _ = Maybe.Just(result).ToInt()
123123
assert.Equal(t, expectedInt, actual)
124124
// Ask channel
@@ -130,7 +130,7 @@ func TestActorAsk(t *testing.T) {
130130

131131
// Timeout cases
132132
expectedInt = 0
133-
result, err = Ask.New(-1).AskOnce(actorRoot, &timeout)
133+
result, err = Ask.New(-1).AskOnceWithTimeout(actorRoot, timeout)
134134
actual, _ = Maybe.Just(result).ToInt()
135135
assert.Equal(t, expectedInt, actual)
136136
assert.Equal(t, ErrActorAskTimeout, err)

0 commit comments

Comments
 (0)