锁定TPL的替代方案

Şaf*_*Gür 0 c# task-parallel-library

我使用任务并行库,我需要同步访问方法,但由于任务不一定为异步操作创建线程,我不能依赖使用锁.

void Foo()
{
    lock(SyncRoot)
    {
        // Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想阻止多个任务同时调用Foo,我可以使用什么而不是锁定?我需要我的任务一个接一个地调用Foo.


  • ContinueWith不是一个选项.
  • 我使用.NET 4.

wei*_*mat 5

来自MSDN:

在幕后,任务排队到ThreadPool,后者已经通过算法(如爬山)进行了增强,这些算法可以确定并调整最大化吞吐量的线程数.

因此,您可以锁定或任何其他线程同步机制,如ManualResetEvent或Memory barrier.