IsCompleted on Awaitable<T>

I have some code that I call, which I don’t control, which does some long-running, not-jobbable operations in the background. That code is called lots of times to kick of operations, and each operation returns an Awaitable, so at the end of kicking them all off I have a collection of Awaitable, one for each operation.

Currently my code waits for all of them to complete. That’s easy. Just run a for loop and await each one.

I’d like to not await each one in turn, and instead kick off another process as each result comes in (effectively this is a WhenAny(), but with Awaitables.) This avoids the situation where Awaitable 3 in the list of 97 is the longest running, and thus none of the follow-up tasks after it get kicked off until much later than they could.

I can’t see how to write that with Awaitable. I think with just regular Awaitable, there’s IsCompleted, which you could call in a loop without awaiting, kick the second task for anything that’s complete in the first set and await NextFrameAsync() at the end of the loop. But that doesn’t work with Awaitable because there doesn’t seem to be an IsCompleted member on the generic.

Is there a way to check if an Awaitable has completed without awaiting it?

Don’t use awaitable for this. I’m still not sure why Awaitable doesn’t expose the same method documented on Awaitable though.