【发布时间】:2015-11-09 05:37:32
【问题描述】:
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(); }
}
【问题讨论】:
-
在这种情况下,为什么要让线程 B 调用
Dispose()? -
Dispose 被称为取消所有未决请求并释放资源的一种手段。
-
但是
Dispose()没有理由取消任何东西。如果要取消,请取消传递给WaitAsync的CancellationToken和同一批次请求中的任何其他异步方法。
标签: .net multithreading semaphore dispose idisposable