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

C# 使用System.Threading.Task进行非阻塞同步,c#,.net,multithreading,task-parallel-library,C#,.net,Multithreading,Task Parallel Library,在当前.Net framework版本中使用System.Threading.Task对象时,有没有一种方法可以从非阻塞线程同步的优点中获益(如所述) 我所寻找的本质上是改变这个代码 new Task(() => { lock (_lock) { ... } }); 进入一个不会阻止线程池线程的线程池,该线程池将由任务在执行受锁保护的操作时使用。如果要使用.Net 4.0 TPL执行此操作,例如,可以使用自定义任务调度程序

在当前.Net framework版本中使用
System.Threading.Task
对象时,有没有一种方法可以从非阻塞线程同步的优点中获益(如所述)

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

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

进入一个不会阻止线程池线程的线程池,该线程池将由
任务
在执行受锁保护的操作时使用。

如果要使用.Net 4.0 TPL执行此操作,例如,可以使用自定义
任务调度程序


如果您可以使用C#5.0,那么可以将
wait
SemaphoreSlim.WaitAsync()
或。改用
Task.Factory.StartNew
。也就是说,如果你真的想实现一个无阻塞的实现,那么方法就是将你的算法分解成一系列的任务和延续。我想这篇文章把你弄糊涂了:
Wait()
无疑是阻塞同步。@道格拉斯:如果
任务
用于并行计算,那么
StartNew
就可以了;但是如果
任务
用于
等待
,那么
任务.运行
会更好..NET 4.5引入了
ConcurrentExclusiveSchedulerPair
,其中包括有限的并发性。很好,我想我喜欢
异步锁
的想法,我会试着摆弄它,看看我能完成我需要的任务有多好。我工作的环境是C#5.0、.NETFramework 4.5,可移植类库项目。