diff options
| author | TSR Berry <20988865+TSRBerry@users.noreply.github.com> | 2023-04-08 01:22:00 +0200 |
|---|---|---|
| committer | Mary <thog@protonmail.com> | 2023-04-27 23:51:14 +0200 |
| commit | cee712105850ac3385cd0091a923438167433f9f (patch) | |
| tree | 4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Common/AsyncWorkQueue.cs | |
| parent | cd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff) | |
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Common/AsyncWorkQueue.cs')
| -rw-r--r-- | Ryujinx.Common/AsyncWorkQueue.cs | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/Ryujinx.Common/AsyncWorkQueue.cs b/Ryujinx.Common/AsyncWorkQueue.cs deleted file mode 100644 index 80f8dcfe..00000000 --- a/Ryujinx.Common/AsyncWorkQueue.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Threading; - -namespace Ryujinx.Common -{ - public sealed class AsyncWorkQueue<T> : IDisposable - { - private readonly Thread _workerThread; - private readonly CancellationTokenSource _cts; - private readonly Action<T> _workerAction; - private readonly BlockingCollection<T> _queue; - - public bool IsCancellationRequested => _cts.IsCancellationRequested; - - public AsyncWorkQueue(Action<T> callback, string name = null) : this(callback, name, new BlockingCollection<T>()) - { - } - - public AsyncWorkQueue(Action<T> callback, string name, BlockingCollection<T> collection) - { - _cts = new CancellationTokenSource(); - _queue = collection; - _workerAction = callback; - _workerThread = new Thread(DoWork) { Name = name }; - - _workerThread.IsBackground = true; - _workerThread.Start(); - } - - private void DoWork() - { - try - { - foreach (var item in _queue.GetConsumingEnumerable(_cts.Token)) - { - _workerAction(item); - } - } - catch (OperationCanceledException) - { - } - } - - public void Cancel() - { - _cts.Cancel(); - } - - public void CancelAfter(int millisecondsDelay) - { - _cts.CancelAfter(millisecondsDelay); - } - - public void CancelAfter(TimeSpan delay) - { - _cts.CancelAfter(delay); - } - - public void Add(T workItem) - { - _queue.Add(workItem); - } - - public void Add(T workItem, CancellationToken cancellationToken) - { - _queue.Add(workItem, cancellationToken); - } - - public bool TryAdd(T workItem) - { - return _queue.TryAdd(workItem); - } - - public bool TryAdd(T workItem, int millisecondsDelay) - { - return _queue.TryAdd(workItem, millisecondsDelay); - } - - public bool TryAdd(T workItem, int millisecondsDelay, CancellationToken cancellationToken) - { - return _queue.TryAdd(workItem, millisecondsDelay, cancellationToken); - } - - public bool TryAdd(T workItem, TimeSpan timeout) - { - return _queue.TryAdd(workItem, timeout); - } - - public void Dispose() - { - _queue.CompleteAdding(); - _cts.Cancel(); - _workerThread.Join(); - - _queue.Dispose(); - _cts.Dispose(); - } - } -} |
