SemaphoreSlim的文档中说:“只有在所有其他操作都已完成时才应使用Dispose”。
以下类应如何调整,以便线程B在线程A等待Async()时可以调用Dispose()。当调用Dispose()时,Async()必须抛出ObjectDisposedException。
class A
{
SemaphoreSlim _sem = new SemaphoreSlim(0);
public Task Async() { return _sem.WaitAsync(); }
public void Dispose() { _sem.Dispose(); }
}
Dispose()
呢? - Jon HannaDispose()
没有任何理由去取消任何操作。如果你想要取消,那么应该在传递给WaitAsync
和同一批请求中的其他异步方法的CancellationToken
上进行取消。 - Jon Hanna