在C#中,在调用lock()之前,通常首先创建一个专用对象,该对象仅用于锁定目的。让我们将这样的用例称为锁定一个普通的对象。
但是这种语言允许锁定非平凡的物体,尽管它通常被认为是不好的做法,并建议避免使用。
语言的设计方式使您可以编写
等代码var someObservable = Observable.from([1, 2, 3, 4, 5]);
var someOtherObservable = Observable.from([6, 7, 8, 9]);
var first = someObservable.take(1);
var second = Observable.create((observer) => {
return first.subscribe(
function onNext(value) {
/* do something with value like: */
observer.next(value);
},
function onError(error) {
observer.error(error);
},
function onComplete() {
someOtherObservable.take(1).subscribe(
function onNext(value) {
observer.next(value);
},
function onError(error) {
observer.error(error);
},
function onComplete() {
observer.complete();
}
);
}
);
}).subscribe(
function onNext(value) {
console.log(value);
},
function onError(error) {
console.error(error);
},
function onComplete() {
console.log("Done!");
}
);
然后为了最佳实践而随处携带上述提示。为什么不首先通过引入可锁定的类/接口禁止这种用法(在这种情况下,你只能将lock()应用于可锁定的对象)?
我能想到的唯一合理的解释是,在某些情况下(罕见但很重要),锁定一个非常重要的对象实际上会使困难事情变得更容易。如果是这样,有人可以举个例子吗?