Valid points in your answer. Named tuples are a great way in my opinion, too. But when the names are missing ... ouf :-D
For the last point: An interface in C# cannot be async, you can just define methods that return Tasks (which will result in async method implementations). I think that was your point. Task.CompletedTask as a return value would have been the best idea in my opinion, but running an empty task just to await it doesn't seem very resource friendly to me. But I am not an expert in that regard.