Best practices for asynchronous user experiences?

Can someone suggest some good examples and resources around designing for async user experiences?

I'm working on a Web application that needs to process invoice submissions asynchronously to improve the user experience. We want to allow them to submit an invoice, receive feedback that it has been received, and process it async on the backend. The current, synchronous submissions requires a lot of processing and can take up to a couple minutes or more to due to integrating with another system. It's not lost on me that 1-2 minutes waiting in a Web UI is horrible.

Note: We can perform a enough validations to reduce the chance of errors on the submissions, but there will still be a small chance of errors.

I'm looking for real-world examples of asynchronous user experiences for processing where it is done well. For example, I know that amazon.com does this for processing orders. You receive an almost immediate response that your order has been received, but that it is pending processing. There is still the slight chance of an out-of-stock issue or some other problem. They communicate that back through notification via email and in the UI.

Users often submit multiple invoices in the same session, so we want them to be able to submit invoices on after the other quickly in a way that will:

  • Make it clear that the submission was received, but more processing is required.
  • Surface errors in a clear way
  • Improve the perception of speed
  • Provide a more natural and improved UX workflow.

Any examples or resources specific to this type of UX topic is very much appreciated.