For the purposes of your question, a long-term task is any task that includes input / output (input-output).
This is a class of excellent tasks that can be expected because what usually happens with I / O is that the computer issues instructions to start I / O and then just waits (usually in a low processor state) for input / output.
So, new WebClient().Download("http://google.com")
is a good example of a task that includes I / O, because to complete this task, the machine will need to prepare a request for google.com, start send it on the socket, wait for the request to be completely sent, wait for the answer to start arriving, and then wait until the answer is fully reached.
However, this definition is not strict; even if you find the maximum subarray of an array of 1,000,000,000 in size it can be a long-term task if it was implemented by creating a new stream, because if we are talking about the calling stream, we will have a very similar scenario: (create a new stream by passing it an array to search for) and then wait for the results without doing anything.
Edit
In light of the above, the example with the maximum subarray of a huge array can be considered as a red herring, because in order to wait for asynchrony, the question of whether this is or is not a long-term task depends on whether it is launched in a separate thread or not.
Thus, a much better definition of a long-term task could be:
Any task that takes such an amount of time to complete it is undesirable to block waiting in the current executable thread.
So, for example, if you are writing an interactive application (GUI) and want to guarantee a response time in milliseconds to your human user, then any task that should take more time is a long-term task: you run it, wait for it, and while it works, your GUI is still responsive. On the other hand, if you are writing a batch processing task that is designed to work overnight to crunch some big data, then almost no task should be considered a long-term task.