【发布时间】:2016-05-13 21:33:31
【问题描述】:
由于某种原因,当 OperationCanceledException 被抛出到 IDataflowBlock 中时,块不会将此异常传播到其 IDataflowBlock.Completion 任务。运行下面的代码示例会返回意外的IDataflowBlock.Completion.Status == TaskStatus.RanToCompletion。
但是,如果块中抛出的异常类型更改为ArgumentNullException,则IDataflowBlock.Completion.Status 更改为TaskStatus.Faulted,并且异常保存在其InnerException 属性中。
知道为什么OperationCanceledException 会被吞没吗?
[TestFixture]
public class TplDataBlockExceptionTest
{
[Test]
public void ShouldThrowException()
{
// Arrange
var block = new TransformBlock<int, string>(i =>
{
throw new OperationCanceledException();
return i.ToString();
});
// Act
block.Post(1);
block.Complete();
try
{
block.Completion.Wait();
}
catch (Exception)
{
// ignored
}
// Assert
Assert.That(block.Completion.IsFaulted);
}
}
【问题讨论】:
标签: c# task-parallel-library tpl-dataflow