使用System.Threading.Task进行非阻塞同步
本文关键字:同步 System Threading Task 使用 | 更新日期: 2023-09-27 18:20:57
在当前.Net框架版本中使用System.Threading.Task
对象时,是否有一种方法可以从非阻塞线程同步的优势中获益,如本文所述?
我所寻找的本质上是改变这个代码
new Task(() =>
{
lock (_lock)
{
...
}
});
转换为不会阻塞Task
在执行由锁保护的操作时将使用的线程池线程的东西。
如果要使用.Net 4.0 TPL执行此操作,可以使用自定义TaskScheduler
,例如ParallelExtensionExtras中的LimitedConcurrencyLevelTaskScheduler
。
如果可以使用C#5.0,则可以将await
与Nito AsyncEx中的SemaphoreSlim.WaitAsync()
或AsyncLock
一起使用。