が完了しない場合 (つまり、またはが呼び出されない場合)TaskCompletionSource
とその はどうなりますか? 完了しないため、 は永遠に存続しますか?Task
TaskCompletionSource
SetCancelled
SetException
SetResult
Task
以下の例では、パラメーター化されたテストの簡略化されたバージョンがあります。タイムアウト (MyEevent
が 1000 ミリ秒以内に呼び出されない) の場合、 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);
}
現在、上記のテストを改善する方法はありますか (たとえば、より簡潔/シンプル/読みやすくするなど)?