foo.DoSomething()
... // remember not to return
// without foo.Done() called
// (EDITed for clarity:
// foo is the state, that changes,
// so you have to keep track of
// its changes)
foo.Done()
vs DoSomething (func(){
... // don't have to remember
// a thing, no side-effects,
// equivalent of .Done() is
// called afterwards for you
})
EDIT2: exact behavior is not the point, keeping track of things is.