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

本文关键字:同步 System Threading Task 使用 | 更新日期: 2023-09-27 18:20:57

在当前.Net框架版本中使用System.Threading.Task对象时,是否有一种方法可以从非阻塞线程同步的优势中获益,如本文所述?

我所寻找的本质上是改变这个代码

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

转换为不会阻塞Task在执行由锁保护的操作时将使用的线程池线程的东西。

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

如果要使用.Net 4.0 TPL执行此操作,可以使用自定义TaskScheduler,例如ParallelExtensionExtras中的LimitedConcurrencyLevelTaskScheduler

如果可以使用C#5.0,则可以将await与Nito AsyncEx中的SemaphoreSlim.WaitAsync()AsyncLock一起使用。