0

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

我正在寻找的本质上是更改此代码

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

进入不会阻塞线程池线程的东西,线程池线程将Task在执行受锁保护的操作时使用。

4

1 回答 1

2

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

如果可以使用 C# 5.0,则可以与Nito AsyncExawait一起使用SemaphoreSlim.WaitAsync()或从中使用。AsyncLock

于 2013-07-04T22:09:32.463 回答