Is my "design pattern" for asynchronous methods good?
When I'm writing a class which contains methods that are probably going to be executed on another thread, then I prepare my class for async usage.
I add events to the class as the following:
methodProgressChanged
methodCompleted

In the method(s), before every sub-operation (for example, iterations) I raise the ProgressChanged event with a custom EventArgs class. This custom class contains info about what sub-operation is beginning now, and what the result of the previous sub-operation was.

So executing the method on another thread is not the method's task, it's just reporting the progress.

And of course, when I execute my method, the caller takes care of subscriptions to the events.

Is this idea acceptable, or should I forgot it totally?
Is my "design pattern" for asynchronous methods good?
===

When I'm writing a class which contains methods that are probably going to be executed on another thread, then I prepare my class for async usage.
I add events to the class as the following:
methodProgressChanged
methodCompleted

In the method(s), before every sub-operation (for example, iterations) I raise the ProgressChanged event with a custom EventArgs class. This custom class contains info about what sub-operation is beginning now, and what the result of the previous sub-operation was.

So executing the method on another thread is not the method's task, it's just reporting the progress.

And of course, when I execute my method, the caller takes care of subscriptions to the events.

Is this idea acceptable, or should I forgot it totally?