If, on the other hand, you need to do computationally intensive work
that keeps the CPU busy,
you want to move it to an Isolate to avoid blocking the event loop,
like you would keep any sort of work out of the main thread.
This is similar to when you move things to a different
thread via Task.Run() in Xamarin.Forms.

For I/O-bound work, declare the function as an async function,
and await on long-running tasks inside the function:

This is how you would typically do network or database calls,
which are both I/O operations.

However, there are times when you might be processing
a large amount of data and your UI hangs.
In Flutter, use Isolates to take advantage of multiple CPU cores
to do long-running or computationally intensive tasks.