8

如果我有一个界面,例如:

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 的东西,因为一些实现这个接口的类实际上是异步的。

谢谢

4

1 回答 1

15

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

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);
}
于 2012-11-23T07:38:22.800 回答