gpt4 book ai didi

c# - 在using语句中调用异步方法

转载 作者:太空狗 更新时间:2023-10-29 21:13:04 25 4
gpt4 key购买 nike

我想使用异步调用发送消息,但在该过程中使用了一次性资源。我不确定如何正确处理这个问题。

using(IDisposable disposeMe = new DisposableThing())
{
MethodAsync(disposeMe);
}

任何想法如何做到这一点。异步方法没有任何回调。

编辑:

根据@Servy 接受的答案的建议。实现更改为:

public async Task Method()
{
using(IDisposable disposeMe = new DisposableThing())
{
await MethodAsync(disposeMe);
}
}

最佳答案

The async method does not have any callback

嗯,这是个问题。一个非常大的问题。如果可能的话,你应该解决这个问题;除非有很好的理由不这样做,否则所有异步方法都应该提供一些方法让调用者知道它们何时完成,无论是回调、返回Task,触发事件等。对于依赖一次性资源来执行此操作的异步方法来说,这尤其麻烦。

如果您确实无法在操作完成时收到通知,那么您就无法在方法完成后调用 Dispose。确保在异步操作仍然需要资源时不释放资源的唯一方法是泄漏资源,根本不释放资源。如果一次性资源有终结器,它最终可能会被清理,但并非所有一次性资源都会这样做。

如果您可以以某种方式修改异步方法,那么您只需在回调中调用Dispose,或者在任务的延续中,或者在相关事件。你将无法使用 using 除非你可以 await 异步操作(因为 await 就是那样很棒)。

关于c# - 在using语句中调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431528/

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