icomplete-mode (and its derivatives) doesn't work for in-buffer
completion. Also, it is buggier than the default completion scheme.
Actually, now icomplete-mode supports in-buffer completion quite well.
By asynchronous completion, I just mean being able to type, and trigger
completion, and have completions appear incrementally as they are
computed, without interfering with you continuing to type. I don't
think that stops immediate feedback for typing.
I believe this is achievable by just wrapping code with while-no-input.