I am working with a third-party dll which exposes methods which return Task and Task<T>. I don't have any control over this assembly or the interface, and I assume the author assumed everything would need to be async since the naming of the methods are *Async() as shown below.
Given that, how do I properly implement the interface if I don't actually have any asynchronous code running?
public interface IFoo
{
    Task DoWorkAsync();
    Task<int> GetValueAsync();
}
My attempt was the following:
public class FooBar : IFoo
{
    public async Task DoWorkAsync()
    {
        // Do Some Work
        await Task.Yield();
    }
    public async Task<int> GetValueAsync()
    {
        // Do Some Work
        var result = ...;
        return Task.FromResult(result);
    }
}
Additionally:
- Was the author correct in exposing only methods that returned Task/Task<T>?
- Was the author correct in suffixing method names with *Async()? Code analysis doesn't complain if I write an async method without appending Async to the name.
 
    