任务WhenAll异常处理

时间:2018-10-06 04:46:02

标签: c#

我希望在某些任务可能失败的情况下使用Task.WhenAll,但是我仍然需要其余已完成任务的结果数据。

根据MSDN

  

如果提供的任何任务在故障状态下完成,则   返回的任务也将在故障状态下完成,其中   异常将包含未包装集合的集合   每个提供的任务中的异常。

但是,没有说的是Task.WhenAll是否仍将在该实例中等待其余Tasks完成。谁能对此问题提供任何澄清?

2 个答案:

答案 0 :(得分:2)

如文档所述:

  

创建一个任务,该任务将在可枚举集合中的所有Task对象都已完成时完成。

因此,它将等待所有任务完成,无论是否已引发异常或已取消异常。然后它将汇总可能的取消和异常并定义其状态。给定任务的结果将包含在原始任务以及例外和取消中。

答案 1 :(得分:0)

您可以通过将所有任务的主体包装在try catch块中并使用适当的数据结构作为任务的结果类型来轻松满足您的要求,以便您了解任务是否失败。

一个例子可能有助于更好地理解我要告诉你的内容。

<p>Slideshow 1:</p>
<div class="slideshow-container">
  <div class="mySlides1">
    <img src="./assets/man001.jpg" style="width:100%">
  </div>

  <div class="mySlides1">
    <img src="./assets/man002.jpg" style="width:100%">
  </div>

  <div class="mySlides1">
    <img src="./assets/man003.jpg" style="width:100%">
  </div>

  <a class="prev" onclick="plusSlides(-1, 0)">&#10094;</a>
  <a class="next" onclick="plusSlides(1, 0)">&#10095;</a>
</div>

<p>Slideshow 2:</p>
<div class="slideshow-container">
  <div class="mySlides2">
    <img src="./assets/man004.jpg" style="width:100%">
  </div>

  <div class="mySlides2">
    <img src="./assets/2.png" style="width:100%">
  </div>

  <div class="mySlides2">
    <img src="./assets/man006.jpg" style="width:100%">
  </div>

  <a class="prev" onclick="plusSlides(-1, 1)">&#10094;</a>
  <a class="next" onclick="plusSlides(1, 1)">&#10095;</a>
</div>

<p>Slideshow 3:</p>
<div class="slideshow-container">
  <div class="mySlides3">
    <img src="./assets/j1.jpg" style="width:100%">
  </div>

  <div class="mySlides3">
    <img src="./assets/j2.jpg" style="width:100%">
  </div>

  <div class="mySlides3">
    <img src="./assets/j3.jpg" style="width:100%">
  </div>

  <a class="prev" onclick="plusSlides(-1, 2)">&#10094;</a>
  <a class="next" onclick="plusSlides(1, 2)">&#10095;</a>
</div>