如果我有一个接口,如:
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的内容,因为实现这个接口的一些类实际上是异步的。
谢谢
发布于 2012-11-23 07:38:22
目前还不清楚您想要实现什么,但是有一种方法(看起来最像“正常”代码)可能只是让它们成为异步方法:
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
复制相似问题