Timeout an async method implemented with TaskCompletionSource
You could use CancellationTokenSource with timeout. Use it together with your TaskCompletionSource like this. E.g.: public Task<OpResult> BlackBoxOperationAysnc() { var tcs = new TaskCompletionSource<TestResult>(); const int timeoutMs = 20000; var ct = new CancellationTokenSource(timeoutMs); ct.Token.Register(() => tcs.TrySetCanceled(), useSynchronizationContext: false); EventHandler<EndOpEventArgs> eventHandler = (sender, args) => { … tcs.TrySetResult(OpResult.BlarBlar); } blackBox.EndAsyncOpEvent += eventHandler; blackBox.StartAsyncOp(); return tcs.Task; … Read more