![]() |
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线程机制,如
要考虑的其他选项包括:
总的来说,我个人的偏好是
|
|
Roy · SQL C#:结果未返回任何内容。读取() 7 年前 |
![]() |
Pablo · 如何在Regex.replace中仅替换捕获组? 9 年前 |
![]() |
rudimenter · 为什么以下代码编译和执行成功? 11 年前 |
![]() |
Rachel · 是否有任何原因在该代码块的List<T>中找不到现有项? 11 年前 |
![]() |
oshirowanen · 动态超级链接 11 年前 |
![]() |
sab669 · SharpSVN不迭代所有子目录和文件 11 年前 |
![]() |
ForeverWintr · Excel中的奇怪行为。工作表。单元格[行,列] 12 年前 |