我有一个连接类,它有几个异步方法,如 SendText、SendImage 等。
连接类有一个 Disconnect 方法,当它被调用时,我必须小心不要在所有异步方法完成执行之前开始更改类的内部状态。
我相信实现这一点的一个好方法是简单地保持正在执行的操作总数,然后当我想断开连接时,我可以简单地设置 Disconnecting = true 然后等待计数达到 0
我正在考虑类似的事情
class ReferenceCounter
{
void Increment();
void Decrement();
async Task WaitForCounterToReachZero();
}
然后当异步操作开始时我可以做
refCounter.Increment();
当它结束时
refCounter.Decrement();
在 Disconnect 方法中
disconnecting = true;
taskCancellationSource.Cancel();
await refCounter.WaitForCounterToReachZero();
Cleanup();
有没有像这样的内置 .NET 类?
或者对我来说更重要的是,有没有更好的方法来做到这一点?
如果它是同步代码,它会很简单
lock (thisLock)
{
while (counter > 0)
Monitor.Wait(thisLock);
}
我刚刚发现内置的 CountdownEvent 类做同样的事情,但它没有异步等待方法,也没有任何事件,所以我不得不阻止。