如果我有一个界面,例如:
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的东西,因为实现此接口的某些类实际上是异步。
由于
答案 0 :(得分: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);
}