Skip to content

Commit af61580

Browse files
committed
Fix AsyncManualResetEvent timeout implementation
1 parent 5a63665 commit af61580

File tree

1 file changed

+7
-15
lines changed

1 file changed

+7
-15
lines changed

Files/Helpers/AsyncManualResetEvent.cs

+7-15
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,21 @@ public Task WaitAsync(CancellationToken cancellationToken = default)
2020
return m_tcs.Task;
2121
}
2222

23+
private async Task<bool> Delay(int milliseconds)
24+
{
25+
await Task.Delay(milliseconds);
26+
return false;
27+
}
28+
2329
public Task<bool> WaitAsync(int milliseconds, CancellationToken cancellationToken = default)
2430
{
2531
var tcs = m_tcs;
2632

2733
cancellationToken.Register(
2834
s => ((TaskCompletionSource<bool>)s).TrySetCanceled(), tcs);
2935

30-
var cancellationTokenSource = new CancellationTokenSource();
31-
cancellationTokenSource.CancelAfter(milliseconds);
32-
cancellationTokenSource.Token.Register(
33-
s =>
34-
{
35-
var l_tcs = (TaskCompletionSource<bool>)s;
3636

37-
if (!l_tcs.Task.IsCanceled)
38-
{
39-
l_tcs.TrySetResult(false);
40-
}
41-
42-
cancellationTokenSource.Dispose();
43-
}, tcs);
44-
45-
return m_tcs.Task;
37+
return Task.WhenAny(m_tcs.Task, Delay(milliseconds)).Result;
4638
}
4739

4840
public void Set()

0 commit comments

Comments
 (0)