[backend/core] Refactor EventHelpers

This commit is contained in:
Laura Hausmann 2024-07-12 18:33:07 +02:00
parent b504bf2548
commit 8cc4a4afc2
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -2,17 +2,18 @@ namespace Iceshrimp.Backend.Core.Helpers;
public sealed class AsyncAutoResetEvent(bool signaled = false) public sealed class AsyncAutoResetEvent(bool signaled = false)
{ {
public bool Signaled { get; private set; } = signaled;
private readonly List<TaskCompletionSource<bool>> _noResetTaskCompletionSources = []; private readonly List<TaskCompletionSource<bool>> _noResetTaskCompletionSources = [];
private readonly List<TaskCompletionSource<bool>> _taskCompletionSources = []; private readonly List<TaskCompletionSource<bool>> _taskCompletionSources = [];
public bool Signaled => signaled;
public Task<bool> WaitAsync(CancellationToken cancellationToken = default) public Task<bool> WaitAsync(CancellationToken cancellationToken = default)
{ {
lock (_taskCompletionSources) lock (_taskCompletionSources)
{ {
if (signaled) if (Signaled)
{ {
signaled = false; Signaled = false;
return Task.FromResult(true); return Task.FromResult(true);
} }
@ -27,7 +28,7 @@ public sealed class AsyncAutoResetEvent(bool signaled = false)
{ {
lock (_taskCompletionSources) lock (_taskCompletionSources)
{ {
if (signaled) if (Signaled)
return Task.FromResult(true); return Task.FromResult(true);
var tcs = new TaskCompletionSource<bool>(); var tcs = new TaskCompletionSource<bool>();
@ -41,7 +42,7 @@ public sealed class AsyncAutoResetEvent(bool signaled = false)
{ {
lock (_taskCompletionSources) lock (_taskCompletionSources)
{ {
signaled = true; Signaled = true;
foreach (var tcs in _noResetTaskCompletionSources.ToList()) foreach (var tcs in _noResetTaskCompletionSources.ToList())
{ {
_noResetTaskCompletionSources.Remove(tcs); _noResetTaskCompletionSources.Remove(tcs);
@ -50,7 +51,7 @@ public sealed class AsyncAutoResetEvent(bool signaled = false)
if (_taskCompletionSources.Count == 0) return; if (_taskCompletionSources.Count == 0) return;
signaled = false; Signaled = false;
foreach (var tcs in _taskCompletionSources.ToList()) foreach (var tcs in _taskCompletionSources.ToList())
{ {
_taskCompletionSources.Remove(tcs); _taskCompletionSources.Remove(tcs);