Start here. This is the direct spoken answer to practice first.
Why this question matters
Some resources must flush, coordinate, or close through asynchronous work. IAsyncDisposable lets the owner await that cleanup without blocking a thread, while the same lifetime and failure-handling responsibilities still apply.
IAsyncDisposable is useful when cleanup itself needs asynchronous work. For example, a resource may need to flush buffered data, complete an async operation, or close a remote connection without blocking a thread. In that case I would use await using so cleanup is awaited even when the method exits through an exception. If cleanup is purely local and quick, IDisposable is enough.