gpt4 book ai didi

c# - 在不返回 void、Task 或 Task 的方法中等待某些内容的正确方法?

转载 作者:行者123 更新时间:2023-11-30 20:19:24 24 4
gpt4 key购买 nike

假设我正在实现一个带有方法签名的接口(interface)

String FooBar();

后来我在我的类中实现了这个接口(interface)

public String FooBar()
{
return "";
}

但在某些时候我想等待一些东西

public async Task<String> FooBar()
{
await Task.Delay(500);
return "";
}

在这种情况下,我如何等待某些东西而不必将方法签名更改为

Task<String> FooBar();

使用 Task.WaitAll 执行此操作的正确方法是什么?还是有更广为接受的模式?

编辑: 我不认为我的问题与 How would I run an async Task<T> method synchronously? 有很大关系,但与它完全重复。 .比起如何调用 async 函数,我更担心如何实现接口(interface)。但我承认加粗的问题确实等同于重复的问题。

我确实看到现在返回 Task 更合适,因为接口(interface)的实现者可能调用 async 方法。否则,我会“将他们拒之门外”,无法正确执行此操作。

最佳答案

How can I await something in this scenario without having to alter the method signature

正确的 解决方案是更改方法签名。任何可以异步实现的接口(interface)方法都应该返回Task。/Task<T> .

(从设计的角度来看,这与决定接口(interface)是否应派生自 IDisposable 非常相似 - 接口(interface)必须预测其自身的实现细节)。

不正确解决方案而言,这只是“从同步方法调用异步方法”问题的另一种变体。没有理想的、通用的或普遍接受的解决方案。您只能做一些技巧,每个技巧都有不同的缺点。我在我的 async brownfield 中介绍了这些文章。

关于c# - 在不返回 void、Task 或 Task<T> 的方法中等待某些内容的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38902302/

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