C# 使用System.Threading.Task进行非阻塞同步
在当前.Net framework版本中使用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执行此操作,例如,可以使用自定义任务调度程序
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,可移植类库项目。