|
|
1
2
两个看起来都不错,但是。。。
…它们不是线程安全的
对。使用闭包(就像在第二种方法中一样)也很好,还有一个额外的优点,那就是你不需要进行强制转换。
当然,如果你加上
那么,如何让这个线程安全呢?问题是
:执行
方案2
|
|
|
2
5
这些代码是否安全与
|
|
|
3
4
a blog entry
ReSharper等工具将尝试检测lambdas中绑定的局部变量是否会更改,并在检测到这种情况时发出警告。
注意,由于UI线程是调用
|
|
4
3
“线程安全”是一个狡猾的野兽。使用这两种方法,问题是线程正在使用的“MyObject”可能会被多个线程修改/读取,从而使状态看起来不一致,或者使线程的行为与实际状态不一致。
例如,说你的
然而,就其本身而言,两种方法都不是固有的线程不安全的,它们只需要确保更改的状态是序列化的,并且访问状态总是给出一致的结果。
就我个人而言,我不会使用第二种方法。如果“僵尸”线程有问题,请设置
|
|
|
5
3
您的第一次尝试相当不错,但是即使在应用程序退出之后,线程仍然存在,因为您没有设置
如果程序在上有争用,可能会遇到并发问题
Java有
更新
好的,如果你修改了
你会
确保修改了哪个对象:
可能是的
下面是一个连接示例:
这是一个
当然,在这种情况下,生成多个线程是毫无意义的,因为您不允许它们同时运行。避免这种情况的一种方法是不更改对的引用
|
|
|
6
2
Monitor.Pulse 或 AutoResetEvent ThreadPool.QueueUserWorkItem 最好用于短期运行的任务。如果应用程序死机,线程池线程也不会挂断应用程序,只要没有死锁阻止非后台线程死机。 |
|
|
7
1
线程方法的选择在很大程度上取决于
不同的.NET线程方法适用于不同的需求。一个非常重要的问题是这个方法是否会很快完成,或者需要一些时间(是短期的还是长期的?)。
一些.NET线程机制,如
要考虑的其他选项包括:
总的来说,我个人的偏好是
|
|
|
AryA Derakhshan · 在指定的时间重复循环 3 年前 |
|
|
user8105388 · If语句不与计时器一起工作 7 年前 |
|
|
Don · 无限循环崩溃,但不在更新函数中 7 年前 |
|
|
user9769106 · 绘制形状C的路径# 7 年前 |
|
|
SPlatten · MSVC 2008更好的时机? 7 年前 |