Comments (4)
This might be a slightly suboptimal answer because I haven't thought about it in a while, but since we're storing an error on Task
already anyway, it probably also makes sense to just put the result there as well:
type Task struct {
Err error
Result interface{}
f func() (interface{}, error)
}
func (t *Task) Run(wg *sync.WaitGroup) {
t.Result, t.Err = t.f()
wg.Done()
}
It's not great that you have to fall back to interface{}
for this though ... it might be worthwhile seeing if you could build some task-specific shims on top of Task
whose only job is to transform interface{}
back to something more material.
from sorg.
Thanks @brandur so something like
tasks := []*pool.Task{
pool.NewTask(func() (interface{}, error) { return nil, nil }),
pool.NewTask(func() (interface{}, error) { return true, nil }),
pool.NewTask(func() (interface{}, error) { return 20, nil }),
pool.NewTask(func() (interface{}, error) { return time.Now(), nil }),
}
And if the Task has to be parameterised assume the signature would need to change to use a variadic interface?
func(a ...interface{}) (interface{}, error)
from sorg.
Thanks @brandur so something like
No worries. And yes — that looks right.
And if the Task has to be parameterised assume the signature would need to change to use a variadic interface?
It's mostly up to your preference again. You could also add your arguments into Task
again:
type Task struct {
Args []interface{}
Err error
Result interface{}
f func() (interface{}, error)
}
Alternatively, remember that those func()
are closures and can capture variables from their surrounding environment. You could also inject data that way:
arg1 := ...
arg2 := ...
pool.NewTask(func() (interface{}, error) {
fmt.Printf("%v %v\n", arg1, arg2)
return nil, nil
}),
from sorg.
Thanks, new to go, just finished reading up on closures and scope, your proposal makes perfect sense. Appreciate the response.
Damian.
from sorg.
Related Issues (20)
- Question about "Using Atomic Transactions to Power an Idempotent API" HOT 1
- HTTP transactions: questions on performance and correctness HOT 1
- Broken URL with parentheses HOT 1
- Missing image for Tenet HOT 1
- ffmpeg-h265 quicktime playback of 5.1 aac HOT 2
- Idempotency keys: using a completer might be unexpected to the client HOT 3
- Add dark theme HOT 1
- Why not use check constraints? HOT 1
- Unable to horizontally scroll code blocks on mobile HOT 4
- Feature Casualties of Large Databases: test suite for checking indices HOT 6
- Transactionally Staged Job Drains in Postgres - Sidekiq extension HOT 3
- Memory leak in "A simple HTTP retry and backoff loop in Go" HOT 2
- Close defer snippet incorrect for http retry? HOT 1
- Postgres Advisory Lock Min/Max HOT 2
- please consider adding a few guidelines to logfmt
- Soft Deletion Probably Isn't Worth It: a potential source of contention/deadlock HOT 1
- "View all atoms" button on atom detail screen ignores theme toggle in dark theme HOT 1
- Typo on https://brandur.org/fragments/typed-feature-flags HOT 1
- Can't run website in local by running `make build` HOT 3
- Render function in https://brandur.org/two-phase-render HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sorg.