Skip to content

Commit

Permalink
fix: Async and AsyncX now returns read-only channels
Browse files Browse the repository at this point in the history
  • Loading branch information
samber committed Mar 20, 2023
1 parent dfdbd97 commit 4a453a4
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

@samber: I sometimes forget to update this file. Ping me on [Twitter](https://twitter.com/samuelberthe) or open an issue in case of error. We need to keep a clear changelog for easier lib upgrade.

## 1.38.0 (2023-xx-xx)

Improvement:
- Async and AsyncX: now returns `<-chan T` instead of `chan T`

## 1.38.0 (2023-03-20)

Adding:
Expand Down
16 changes: 8 additions & 8 deletions concurrency.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func Synchronize(opt ...sync.Locker) *synchronize {
}

// Async executes a function in a goroutine and returns the result in a channel.
func Async[A any](f func() A) chan A {
func Async[A any](f func() A) <-chan A {
ch := make(chan A, 1)
go func() {
ch <- f()
Expand All @@ -35,7 +35,7 @@ func Async[A any](f func() A) chan A {
}

// Async0 executes a function in a goroutine and returns a channel set once the function finishes.
func Async0(f func()) chan struct{} {
func Async0(f func()) <-chan struct{} {
ch := make(chan struct{}, 1)
go func() {
f()
Expand All @@ -45,12 +45,12 @@ func Async0(f func()) chan struct{} {
}

// Async1 is an alias to Async.
func Async1[A any](f func() A) chan A {
func Async1[A any](f func() A) <-chan A {
return Async(f)
}

// Async2 has the same behavior as Async, but returns the 2 results as a tuple inside the channel.
func Async2[A any, B any](f func() (A, B)) chan Tuple2[A, B] {
func Async2[A any, B any](f func() (A, B)) <-chan Tuple2[A, B] {
ch := make(chan Tuple2[A, B], 1)
go func() {
ch <- T2(f())
Expand All @@ -59,7 +59,7 @@ func Async2[A any, B any](f func() (A, B)) chan Tuple2[A, B] {
}

// Async3 has the same behavior as Async, but returns the 3 results as a tuple inside the channel.
func Async3[A any, B any, C any](f func() (A, B, C)) chan Tuple3[A, B, C] {
func Async3[A any, B any, C any](f func() (A, B, C)) <-chan Tuple3[A, B, C] {
ch := make(chan Tuple3[A, B, C], 1)
go func() {
ch <- T3(f())
Expand All @@ -68,7 +68,7 @@ func Async3[A any, B any, C any](f func() (A, B, C)) chan Tuple3[A, B, C] {
}

// Async4 has the same behavior as Async, but returns the 4 results as a tuple inside the channel.
func Async4[A any, B any, C any, D any](f func() (A, B, C, D)) chan Tuple4[A, B, C, D] {
func Async4[A any, B any, C any, D any](f func() (A, B, C, D)) <-chan Tuple4[A, B, C, D] {
ch := make(chan Tuple4[A, B, C, D], 1)
go func() {
ch <- T4(f())
Expand All @@ -77,7 +77,7 @@ func Async4[A any, B any, C any, D any](f func() (A, B, C, D)) chan Tuple4[A, B,
}

// Async5 has the same behavior as Async, but returns the 5 results as a tuple inside the channel.
func Async5[A any, B any, C any, D any, E any](f func() (A, B, C, D, E)) chan Tuple5[A, B, C, D, E] {
func Async5[A any, B any, C any, D any, E any](f func() (A, B, C, D, E)) <-chan Tuple5[A, B, C, D, E] {
ch := make(chan Tuple5[A, B, C, D, E], 1)
go func() {
ch <- T5(f())
Expand All @@ -86,7 +86,7 @@ func Async5[A any, B any, C any, D any, E any](f func() (A, B, C, D, E)) chan Tu
}

// Async6 has the same behavior as Async, but returns the 6 results as a tuple inside the channel.
func Async6[A any, B any, C any, D any, E any, F any](f func() (A, B, C, D, E, F)) chan Tuple6[A, B, C, D, E, F] {
func Async6[A any, B any, C any, D any, E any, F any](f func() (A, B, C, D, E, F)) <-chan Tuple6[A, B, C, D, E, F] {
ch := make(chan Tuple6[A, B, C, D, E, F], 1)
go func() {
ch <- T6(f())
Expand Down

0 comments on commit 4a453a4

Please sign in to comment.