当前位置:  开发笔记 > 编程语言 > 正文

强制服务中的线程等待另一个线程完成

如何解决《强制服务中的线程等待另一个线程完成》经验,为你挑选了1个好方法。

我正在编写一种服务,它有五种不同的方法,可能需要5秒到5分钟才能运行.

该服务将安排这些不同的方法以不同的间隔运行.

我不希望任何方法同时运行,所以我如何检查方法是否正在运行并在其完成时将自己排队运行?

安东尼



1> Marc Gravell..:

如果你想要简单,并且所有方法都在同一个类中,你可以使用[MethodImpl]:

[MethodImpl(MethodImplOptions.Synchronized)]
public void Foo() {...}

[MethodImpl(MethodImplOptions.Synchronized)]
public void Bar() {...}

例如方法,这锁定this; 对于静态方法,这会锁定typeof(TheClass).

因此,这些锁定对象是公共的 - 因此有一个远程(但真正的)机会,另一部分代码可能会锁定它们.创建自己的锁定对象通常被认为是更好的做法:

private readonly object syncLock = new object(); // or static if needed

...
public void Foo() {
   lock(syncLock) {
      ...
   }
}

等等


旁白:一个奇怪的事实; ECMA规范没有将[MethodImpl]的特定模式定义为"有效",甚至包括私有锁的示例.然而,MS规范坚持这个/ typeof.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有