Kar*_*ten 8 c# multithreading .net-4.0 task-parallel-library cancellation-token
我想使用锁或类似的同步来保护关键部分.同时我想听一个CancellationToken.
现在我正在使用这样的互斥锁,但是互斥锁没有那么好的性能.我可以使用任何其他同步类(包括新的.Net 4.0)而不是互斥锁吗?
WaitHandle.WaitAny(new[] { CancelToken.WaitHandle, _mutex});
CancelToken.ThrowIfCancellationRequested();
Run Code Online (Sandbox Code Playgroud)
sll*_*sll 12
看看SemaphoreSlim Class的新.NET 4.0 Framework功能.它提供了SemaphoreSlim.Wait(CancellationToken)方法.
阻止当前线程,直到它可以进入SemaphoreSlim,同时观察CancellationToken
从某些角度来看,在这种简单的情况下使用Semaphore可能是一种开销,因为最初它的设计目的是为多个线程提供访问权限,但也许您可能会发现它很有用.
编辑:代码片段
CancellationToken token = new CancellationToken();
SemaphoreSlim semaphore = new SemaphoreSlim(1,1);
try {
// block section entrance for other threads
semaphore.Wait(token);
// critical section code
// ...
if (token.IsCancellationRequested)
{
// ...
}
}
finally {
semaphore.Release();
}
Run Code Online (Sandbox Code Playgroud)