gpt4 book ai didi

c# - 异步编程和虚函数

转载 作者:太空狗 更新时间:2023-10-29 18:16:30 24 4
gpt4 key购买 nike

如果我有这样的界面:

using System.Threading.Tasks;

...

public interface IFoo
{
Task doIt();

Task<bool> doItAndReturnStuff();
}

实现此接口(interface)的类之一恰好不需要异步方法,我该如何正确覆盖这些函数?

换句话说,如何正确返回包装在 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 的东西,因为一些实现这个接口(interface)的类实际上是异步的。

谢谢

最佳答案

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

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

关于c# - 异步编程和虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13524762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com