You need `"$@"`, not just `$@` at the end of the command. Otherwise it will split any arguments that have spaces in them. E.g. try
long_fn() {
echo "$1"
sleep "$2"
}
to 1s long_fn "This has spaces in it" 5