I have a method that does a whole bunch of work, then submit an async write to the disk. The question here is how should I design it?
In general, all of the method’s work is done, and the caller can continue doing whatever they want to do with they life, all locks are released, all the data structures are valid again, etc.
However, it isn’t until the async work complete successfully that we are actually done with the work.
I could do it like this:
But this implies that you have to wait for the task to complete, which isn’t true. The commit function looks like this:
So by the time you have the task from the method, all the work has been done. You might want to wait of the task to ensure that the data is actually durable on disk, but in many cases, you can get away with not waiting.
I am thinking about doing it like this:
To make it explicit that there isn’t any async work done that you have to wait for.