如果未完成
在下面的示例中,我有一个参数化测试的简化版本。如果超时(
TaskCompletionSource
(即未调用 SetCancelled
、SetException
或 SetResult
),那么会发生什么?Task
是否因为从未完成而永远存在?在下面的示例中,我有一个参数化测试的简化版本。如果超时(
MyEevent
在 1000ms 内未被调用),则 TaskCompletionSource
(tcs
)将永远未完成。我有很多类似这样的测试。我需要进行任何清理吗(例如确保调用了 tcs.SetCancelled())?[Theory]
[InlineData("aa")]
[InlineData(2)]
[InlineData(true)]
[InlineData(null)]
public async Task RaiseMyEvent_RaisesMyEvent_WithOriginalValue(object value)
{
var sut = new Thing();
var tcs = new TaskCompletionSource<object>();
sut.MyEvent += (_, args) => tcs.SetResult(args.Value);
sut.RaiseMyEvent(value);
tcs.Task.Should().BeSameAs(await Task.WhenAny(Task.Delay(1000), tcs.Task), "MyEvent should be raised within 1000ms");
tcs.Task.Result.Should().Be(value);
}
顺便问一下,有没有办法改进上面的测试(例如,更加简洁/简单/易读)?