我有一个 C# 控制台应用程序,其中包含许多异步任务。其中一项任务是抛出异常。但是,我了解到主机代码没有按预期处理该场景。为了了解发生了什么,我决定进行一个测试。此测试的目的是创建一个Task异步运行的程序,但故意抛出异常。我想看看返回的内容是否符合主机代码的预期。
令我惊讶的是,该Task对象的IsCompletedSuccessfully属性是true,IsFaulted属性是false。然而,我期待IsCompletedSuccessfully成为false并且IsFaulted成为true。代码如下所示:
[Fact]
public void Repro()
{
var task = new Task(async () => {
var operand1 = 2;
var operand2 = 0;
var result = operand1 / operand2;
Thread.Sleep(250);
await Task.CompletedTask;
});
task.RunSynchronously();
Console.WriteLine($"Cancelled: {task.IsCanceled}, Completed: {task.IsCompleted}, Completed Successfully: {task.IsCompletedSuccessfully}, Faulted: {task.IsFaulted}");
if (task.Exception != null)
{
Console.WriteLine("There was an exception");
}
Assert.Equal(false, task.IsCompletedSuccessfully);
Assert.Equal(true, task.IsFaulted);
}
Run Code Online (Sandbox Code Playgroud)
为什么/如何成功完成此任务?为什么它没有毛病呢?我预计它会抛出除以零的异常。
谢谢。
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |