Say I am implementing an interface with the method signature
public String FooBar()
public async Task<String> FooBar()
How can I await something in this scenario without having to alter the method signature
The proper solution is to alter the method signature. Any interface method that could be implemented asynchronously should return
(From a design perspective, this is very similar to deciding whether an interface should derive from
IDisposable - the interface has to predict its own implementation details).
As far as improper solutions go, this is just another variant of the "call async method from sync method" question. There is no ideal, universal, or commonly-accepted solution. There are only a few hacks you can do, each with different drawbacks. I cover these in my async brownfield article.