Specifying deadlines
Deadlines are the most important thing when we are dealing with asynchronous communication. This is because a call could never return due to network or other problems. That is why Google recommends that we set a deadline for each of our RPC calls. Fortunately for us, this is as easy as canceling a call.
The first thing that we need to do, on the client side, is to create a context. This is similar to the WithCancel
function, but this time, we will use WithTimeout
. It takes a parent context like WithCancel
but on top of that, it takes a Time
instance representing the maximum amount of time for which we are willing to wait for a server answer.
Instead of WithCancel
in printTasks
, we are now going to have the following context:
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Millisecond) defer cancel()
Obviously, a timeout of 1 millisecond is way too low to let the server answer, but this is done on purpose so that we can get a DeadlineExceeded...