嵌套工作区
应用程序可以嵌套工作区以定义特定任务的属性并限定属性的范围,而不必向应用程序的所有部分提供这些工作区。
当应用程序创建一个工作区时,工作区上下文与创建线程关联在一起。如果应用程序线程创建另一个工作区,新的工作区将嵌套在现有工作区中并成为当前工作区。嵌套工作区可以看到原始的封闭式工作区中定义的所有属性。应用程序可以设置嵌套工作区中不属于封闭式工作区的其他属性。
使用嵌套工作区的应用程序实际看不到封闭式工作区的嵌套情况。当前工作区显示为一组同级属性,其中包括封闭式工作区的属性。在下图中,封闭式工作区保存了几个属性,而嵌套工作区则保存了其他属性。最外层的工作区看不到嵌套工作区中设置的属性。但嵌套工作区可以看到两个工作区中的属性。
图 1. 定义嵌套工作区中的新属性

嵌套还会影响属性的外观设置。只能从设置属性的工作区中删除属性或直接修改属性,但是嵌套工作区还可以用于暂时覆盖属性中的信息,而不必修改属性。根据与封闭式工作区中的属性关联的方式,可以在嵌套工作区中覆盖封闭式工作区中键的方式和值。
创建属性时与之关联的方式决定了嵌套工作区是否可以覆盖属性。从嵌套工作区的角度而言,封闭式工作区中使用的属性方式可以分组如下:
- 允许嵌套工作区本地覆盖键的方式或值的方式。允许覆盖的方式为:
- 常规
- 固定常规
- 不允许嵌套工作区本地覆盖键的方式或值的方式。不允许覆盖的方式为:
- 只读
- 固定只读
如果封闭式工作区使用一种可以覆盖的方式定义了属性,那么嵌套工作区可以为键指定一个新值或为属性指定一个新方式。新值或新方式将成为后续嵌套工作区看到的值或方式。对方式的更改由“更改方式”中描述的限制管理。如果封闭式工作区使用一种无法覆盖的方式定义了属性,那么任何嵌套工作区都不能为键指定一个新值。
嵌套工作区可以从封闭式工作区删除属性,但更改仅在嵌套工作区的持续时间内有效。当嵌套工作区完成时,添加到嵌套工作区中的任何属性会消失,而从嵌套工作区中删除的任何属性将复原。
下图说明了覆盖封闭式工作区中的属性。嵌套工作区重新定义了封闭式工作区中设置的两个属性。另两个属性无法覆盖。嵌套工作区还定义了两个新属性。最外层的工作区看不到嵌套工作区中设置或重新定义的属性。而嵌套工作区可以看到两个工作区中的属性,但看到的重新定义的属性的值是那些在嵌套工作区中设置的值。
图 2. 重新定义嵌套工作区中的现有属性
