When using source(), all the content of the file will be evaluated from the chunk where you called source, and the output will have source("example.R") in the chunk.
When using read_chunk(), knitr will read the content labelling based on the comment, then it will use the piece of code with the correct label when used in a chunk (and not the all file at once), and in the output the code in the chunk will be the pieces of code itself.
So this is different usage. Basically, read_chunk() is useful to use in code chunk content some code that is stored in an external R file.
If you want to source a whole file content at once, while having the code chunk content being the content of the file, you can also have a look at the file chunk option
```{r, file = "example.R"}
```
I let you try all that - you should see the different in the output produced.