lit*_*rva 2 .net c# multithreading
我正在编写一种服务,它有五种不同的方法,可能需要5秒到5分钟才能运行.
该服务将安排这些不同的方法以不同的间隔运行.
我不希望任何方法同时运行,所以我如何检查方法是否正在运行并在其完成时将自己排队运行?
安东尼
如果你想要简单,并且所有方法都在同一个类中,你可以使用[MethodImpl]:
[MethodImpl(MethodImplOptions.Synchronized)]
public void Foo() {...}
[MethodImpl(MethodImplOptions.Synchronized)]
public void Bar() {...}
Run Code Online (Sandbox Code Playgroud)
例如方法,这锁定this; 对于静态方法,这会锁定typeof(TheClass).
因此,这些锁定对象是公共的 - 因此有一个远程(但真正的)机会,另一部分代码可能会锁定它们.创建自己的锁定对象通常被认为是更好的做法:
private readonly object syncLock = new object(); // or static if needed
...
public void Foo() {
lock(syncLock) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
等等
旁白:一个奇怪的事实; ECMA规范没有将[MethodImpl]的特定模式定义为"有效",甚至包括私有锁的示例.然而,MS规范坚持这个/ typeof.
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |