Runs a given suspending block of code inside a coroutine with a specified timeout and throws
a TimeoutCancellationException if the timeout was exceeded.
The code that is executing inside the block is cancelled on timeout and the active or next invocation of
the cancellable suspending function inside the block throws a TimeoutCancellationException.
The sibling function that does not throw an exception on timeout is withTimeoutOrNull.
Note that the timeout action can be specified for a select invocation with onTimeout clause.
Implementation note: how the time is tracked exactly is an implementation detail of the context’s CoroutineDispatcher.
timeMillis - timeout time in milliseconds.