我对C#中的线程有点新意,并且对于那里的内容有几个问题:
在C#中实现线程有哪些方法? (即我可以想到两个顶部:backgroundWorker,Thread等)
如何导致死锁?如果出现死锁,你怎么摆脱它(在C#中)?
后台工作者如何实施?它似乎有一套潜在的方法,但我想知道那些方法和实例是什么......
谢谢!
答案 0 :(得分:10)
C#中线程的权威初学者指南在这里: http://www.albahari.com/threading/
BackgroundWorker 上的文档以及完整的工作示例位于:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
死锁在此解释:http://www.albahari.com/threading/part2.aspx
线程可以通过多种方式实现。您可以直接使用它们,从ThreadPool中提取它们,或使用Task Parallel Library间接使用它们。
答案 1 :(得分:9)
答案 2 :(得分:0)
.net 4提供并行LINQ。如果你想并行化一个无副作用的计算,这很容易在函数/ linq风格中表达。
答案 3 :(得分:0)
对于所有常见用途和目的,请使用Thread
。如果您想从某个线程与GUI进行通信,您可能会考虑使用BackgroundWorker
,因为它会自动序列化(使用Invoke()
)对GUI方法的调用,因此您不会遇到GUI锁定问题。 / p>
就僵局而言,不要担心它们。只有当你有2个线程竞争同一组资源时才有可能发生死锁,我想你现在还不会解决这个问题。
答案 4 :(得分:0)
我会将答案分为3个部分。因此,使用.net 4.0,上面的所有示例都属于以下三大类: 1.由.net线程池管理的线程(异步委托调用,后台工作等) 2.线程类 - 你必须自己管理线程的生命周期 最后是需要多核CPU的Parallel Linq。