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