【问题标题】:executing ContinueWith when other continuations have not executed在其他延续未执行时执行 ContinueWith
【发布时间】:2016-01-01 23:00:37
【问题描述】:

鉴于这样的事情:

.ContinueWith((_, o) => this.Foo(), null, TaskContinuationOptions.OnlyOnRanToCompletion)
.ContinueWith((_, o) => this.Bar(), null, TaskContinuationOptions.OnlyOnFaulted)
.ContinueWith((_, o) => this.AnythingElse(), null, TaskContinuationOptions.?

有没有办法构造一个在其他延续没有执行时将执行AnythingElse 的延续?

我想捕获所有其他可能的终止,但前提是上面的前两个延续之一尚未执行。

【问题讨论】:

  • 如果我理解正确,你想只在 Foo 或 Bar 还没有完成的情况下执行AnythingElse?我不太清楚,因为您使用 ContinueWith (这意味着:在上一个任务完成后运行 this),但是您说只有在它们尚未执行时才想继续
  • 如果没有异常并且它没有运行完成 - 更重要的是 - 在任何没有执行 foo 和 bar 的情况下,我希望执行任何其他操作。
  • 如果没有异常并且它没有运行完成,我想要执行任何其他操作它怎么能不运行完成?你想设置一个超时吗?我不太清楚你在这里的意思。

标签: c# asynchronous async-await continuations


【解决方案1】:

使用OnlyOnCancelled,因为这是唯一的另一种情况。

您还可以使用一个统一的延续,并根据任务状态决定做什么。我认为这是最简洁的方式,因为它会产生顺序查找的代码。

【讨论】:

  • 恐怕只在当前代码段上使用OnlyOnCanceled 将无法正常工作,以防Foo 被取消。
  • 如果 Foo 被取消,前件(此处未显示)和 ContinueWith 任务都不会最终处于取消状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2021-10-19
  • 1970-01-01
相关资源
最近更新 更多