aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/AsyncWorkQueue.cs
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Common/AsyncWorkQueue.cs
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Common/AsyncWorkQueue.cs')
-rw-r--r--Ryujinx.Common/AsyncWorkQueue.cs100
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();
- }
- }
-}