使用System.Threading.Task进行非阻塞同步

时间:2013-07-04 17:04:42

标签: c# .net multithreading task-parallel-library

有没有办法从非阻塞线程同步的优势中受益,例如描述here,但在当前.Net框架版本中使用System.Threading.Task对象时?

我正在寻找的是改变这段代码

new Task(() =>
{
    lock (_lock)
    {
        ...            
    }
});

进入不会阻塞Task执行受锁保护的操作的线程池线程的东西。

1 个答案:

答案 0 :(得分:2)

如果您想使用.Net 4.0 TPL执行此操作,则可以使用自定义TaskScheduler,例如LimitedConcurrencyLevelTaskScheduler from ParallelExtensionsExtras

如果您可以使用C#5.0,则可以将awaitSemaphoreSlim.WaitAsync()AsyncLock from Nito AsyncEx一起使用。