0

在我的 TFS2012 构建工作流程中,我有一个 Parallel 活动,并且在一些分支中我有 try-finally 活动。如果一个分支失败(例如,使用 CodeAnalysis 编译发现 CodeAnalysis 错误),则其他分支将被取消。但是,如果一个分支在一个包含块的 try 块内finally,则 finally 块运行,如果花费超过 30 秒,则取消失败,并显示:

BuildWarning: The workflow instance accepted a stop request but did not complete within 00:00:29.9922015. This may indicate an AsyncCodeActivity is active that does not support cancellation.

我想避免这样的消息,所以:

  1. 我可以以某种方式进行try-finally最终运行的活动,当在内部引发异常时try,而不是在整个事情被取消时?
  2. 如果没有,我想if在块内添加一个finally工作流已被取消的块,而不是做长时间的事情。我如何知道工作流已被取消?

编辑:这种模式甚至出现在 TFS2012 附带的 DefaultTemplate.11.1.xaml 中 - CopyDirectory 可能需要很长时间,但它位于TryCatch.Finally

<TryCatch DisplayName="Try Compile, Test, and Associate Changesets and Work Items">
  <TryCatch.Finally>
    <Sequence DisplayName="Revert Workspace and Copy Files to Drop Location">
      <mtbwa:InvokeForReason DisplayName="Revert Workspace for Shelveset Builds" Reason="CheckInShelveset, ValidateShelveset">
        <mtbwa:RevertWorkspace DisplayName="Revert Workspace" Workspace="[Workspace]" />
      </mtbwa:InvokeForReason>
      <If  Condition="[Not String.IsNullOrEmpty(DropLocation)]" DisplayName="If DropLocation is Set">
        <If.Then>
          <mtbwa:CopyDirectory DisplayName="Drop Files to Drop Location" Source="[BinariesDirectory]" Destination="[DropLocation]" />
        </If.Then>
      </If>
    </Sequence>
  </TryCatch.Finally>
  <TryCatch.Try>
   (...)
  </TryCatch.Try>
</TryCatch>
4

0 回答 0