【发布时间】:2013-07-04 17:04:41
【问题描述】:
有没有办法从非阻塞线程同步的优点中受益,例如here 中描述的,但在当前.Net 框架版本中使用System.Threading.Task 对象时?
我正在寻找的本质上是更改此代码
new Task(() =>
{
lock (_lock)
{
...
}
});
进入不会阻塞Task 在执行受锁保护的操作时将使用的线程池线程的东西。
【问题讨论】:
-
如果关键部分是短暂的并且可以避免死锁风险,则可以在任务内阻塞。
-
另外,不要显式使用
Task构造函数。请改用Task.Factory.StartNew。 -
也就是说,如果你真的要实现非阻塞实现,那么可以将你的算法分解为一系列任务和延续。
-
我觉得这篇文章把你弄糊涂了:
Wait()肯定是 blocking 同步。 -
@Douglas:如果
Task用于并行计算,那么StartNew就可以了;但如果Task用于await,则Task.Run更好。
标签: c# .net multithreading task-parallel-library