c# – 异步编程和虚函数

如果我有一个界面,如:

using System.Threading.Tasks;

...

public interface IFoo
{
  Task doIt();

  Task<bool> doItAndReturnStuff();
}

并且其中一个实现此接口的类恰好不需要异步方法,我如何才能正确覆盖这些函数?

换句话说,如何正确返回包装在Task对象中的“void”和“bool”?

例如:

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;
  }
}

注意 – 我不能完全剥离Task的东西,因为实现这个接口的一些类实际上是异步的.

谢谢

目前还不清楚你想要实现什么,但是一种方法(看起来最像“普通”代码)可能只是让它们成为异步方法:

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

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

没有任何await表达式,该方法无论如何都将同步完成.您将收到有关每种方法的警告,但您可以使用#pragma为此段代码禁用该方法.

或者 – 我想更简单地说,不要求#pragma禁用警告 – 将使用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);
}
翻译自:https://stackoverflow.com/questions/13524762/async-programmic-and-virtual-functions

转载注明原文:c# – 异步编程和虚函数