有没有办法从非阻塞线程同步的优势中受益,例如描述here,但在当前.Net框架版本中使用System.Threading.Task
对象时?
我正在寻找的是改变这段代码
new Task(() =>
{
lock (_lock)
{
...
}
});
进入不会阻塞Task
执行受锁保护的操作的线程池线程的东西。
答案 0 :(得分:2)
如果您想使用.Net 4.0 TPL执行此操作,则可以使用自定义TaskScheduler
,例如LimitedConcurrencyLevelTaskScheduler
from ParallelExtensionsExtras。
如果您可以使用C#5.0,则可以将await
与SemaphoreSlim.WaitAsync()
或AsyncLock
from Nito AsyncEx一起使用。