首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步程序和虚拟函数

异步程序和虚拟函数
EN

Stack Overflow用户
提问于 2012-11-23 07:32:41
回答 1查看 3.5K关注 0票数 8

如果我有一个接口,如:

代码语言:javascript
复制
using System.Threading.Tasks;

...

public interface IFoo
{
  Task doIt();

  Task<bool> doItAndReturnStuff();
}

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

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

例如:

代码语言:javascript
复制
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的内容,因为实现这个接口的一些类实际上是异步的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-23 07:38:22

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

代码语言:javascript
复制
public async Task DoIt()
{
    // No-op
}

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

如果没有任何await表达式,无论如何该方法都将同步完成。您将得到每个方法的警告,但是您可以使用#pragma禁用这段代码。

或者--我猜更简单的是不要求#pragma禁用警告--将使用Task.FromResult

代码语言:javascript
复制
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);
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13524762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档