Async programmic and virtual functions

asynchronous, c#, windows-runtime, windows-store-apps

Solution

It's not clear what you're trying to achieve, but one approach (which would look the most like "normal" code) is probably just to make them async methods anyway:

public async Task DoIt()
{
    // No-op
}

public async Task<bool> DoItAndReturnStuff()
{
    return true;
}

Without any `await` expressions, the method will complete synchronously anyway. You'll get a warning on each method, but you could disable that just for this piece of code using a `#pragma`.

Alternatively - and I guess more simply in terms of not requiring a `#pragma` to disable warnings - would be to use `Task.FromResult`:

public Task DoIt()
{
    // Returns a Task<bool>, but that's okay - it's still a Task
    return Task.FromResult(true);
}

public Task<bool> DoItAndReturnStuff()
{
    return Task.FromResult(true);
}

Problem

If I have an interface such as: ``` using System.Threading.Tasks; ... public interface IFoo { Task doIt(); Task<bool> doItAndReturnStuff(); } ``` and one of the classes implementing this interface just happens to not require async methods, how can i correct override these functions? In other words, how do I correctly return "void" and "bool" wrapped in Task objects? For example: ``` public class FooHappensToNotNeedAsync : IFoo { public override Task doIt() { // If I don't return anything here, I get // error that not all code paths return a value. // Can I just return null? } public override Task<bool> doItAndReturnStuff() { // If I want to return true, how to I do it? // This doesn't work: return true; } } ``` NOTE - I can't strip the Task stuff completely because some of the classes that implement this interface are in fact asynch. Thanks

Original source

Related problems