在using语句中调用异步方法

Bri*_*ett 6 c# asynchronous

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

using(IDisposable disposeMe = new DisposableThing())
{
    MethodAsync(disposeMe);
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:

基于@Servy接受的答案的建议.实施改为:

public async Task Method()
{
    using(IDisposable disposeMe = new DisposableThing())
    {
        await MethodAsync(disposeMe);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 10

异步方法没有任何回调

那是一个问题.一个非常大的问题.如果可能的话你应该解决这个问题; 除非有一个很好的理由不这样做,所有异步方法都应该为调用者提供一些方法来知道它们何时完成,无论是回调,返回Task,触发事件等等.对于异步方法来说尤其令人不安.依赖于一次性资源来做到这一点.

如果在操作完成时确实无法得到通知,则Dispose在方法完成后无法调用.确保在异步操作仍然需要时不要处理资源的唯一方法是泄漏资源而不是完全丢弃它.如果一次性资源有一个终结器,它最终可能会被清理掉,但并非所有的一次性资源都这样做.

如果你以某种方式修改异步方法,那么你只需要调用Dispose回调,或者在任务的延续中,或者在相关事件的处理程序中.你将无法使用a,using除非你可以await进行异步操作(因为await这样真棒).