Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AsyncActionDispatcher.cs
Go to the documentation of this file.
1
using
System
;
2
using
System.Collections.Concurrent
;
3
using
System.Diagnostics
;
4
using
System.Threading
;
5
6
namespace
ReLogic.Threading
;
7
8
public
class
AsyncActionDispatcher
:
IDisposable
9
{
10
private
Thread
_actionThread
;
11
12
private
readonly
BlockingCollection<Action>
_actionQueue
=
new
BlockingCollection<Action>
();
13
14
private
readonly
CancellationTokenSource
_threadCancellation
=
new
CancellationTokenSource
();
15
16
private
volatile
bool
_isRunning
;
17
18
public
int
ActionsRemaining
=>
_actionQueue
.
Count
;
19
20
public
bool
IsDisposed
{
get
;
private
set
; }
21
22
public
bool
IsRunning
=>
_isRunning
;
23
24
public
void
Queue
(Action
action
)
25
{
26
_actionQueue
.
Add
(
action
);
27
}
28
29
public
void
Start
()
30
{
31
if
(
IsRunning
)
32
{
33
throw
new
InvalidOperationException
(
"AsyncActionDispatcher is already started."
);
34
}
35
_isRunning
=
true
;
36
_actionThread
=
new
Thread
(
LoaderThreadStart
)
37
{
38
IsBackground =
true
,
39
Name
=
"AsyncActionDispatcher Thread"
40
};
41
_actionThread
.
Start
();
42
}
43
44
public
void
Stop
()
45
{
46
if
(!
IsRunning
)
47
{
48
throw
new
InvalidOperationException
(
"AsyncActionDispatcher is already stopped."
);
49
}
50
_isRunning
=
false
;
51
_threadCancellation
.
Cancel
();
52
_actionThread
.
Join
();
53
}
54
55
[DebuggerNonUserCode]
56
private
void
LoaderThreadStart
()
57
{
58
while
(
_isRunning
)
59
{
60
try
61
{
62
_actionQueue
.
Take
(
_threadCancellation
.
Token
)();
63
}
64
catch
(
OperationCanceledException
)
65
{
66
break
;
67
}
68
}
69
}
70
71
protected
virtual
void
Dispose
(
bool
disposing)
72
{
73
if
(
IsDisposed
)
74
{
75
return
;
76
}
77
if
(disposing)
78
{
79
if
(
IsRunning
)
80
{
81
Stop
();
82
}
83
_actionQueue
.
Dispose
();
84
_threadCancellation
.
Dispose
();
85
}
86
IsDisposed
=
true
;
87
}
88
89
public
void
Dispose
()
90
{
91
Dispose
(disposing:
true
);
92
}
93
}
ReLogic.Threading.AsyncActionDispatcher.IsRunning
bool IsRunning
Definition
AsyncActionDispatcher.cs:22
ReLogic.Threading.AsyncActionDispatcher.LoaderThreadStart
void LoaderThreadStart()
Definition
AsyncActionDispatcher.cs:56
ReLogic.Threading.AsyncActionDispatcher._actionThread
Thread _actionThread
Definition
AsyncActionDispatcher.cs:10
ReLogic.Threading.AsyncActionDispatcher.Dispose
virtual void Dispose(bool disposing)
Definition
AsyncActionDispatcher.cs:71
ReLogic.Threading.AsyncActionDispatcher._threadCancellation
readonly CancellationTokenSource _threadCancellation
Definition
AsyncActionDispatcher.cs:14
ReLogic.Threading.AsyncActionDispatcher._isRunning
volatile bool _isRunning
Definition
AsyncActionDispatcher.cs:16
ReLogic.Threading.AsyncActionDispatcher.ActionsRemaining
int ActionsRemaining
Definition
AsyncActionDispatcher.cs:18
ReLogic.Threading.AsyncActionDispatcher.Stop
void Stop()
Definition
AsyncActionDispatcher.cs:44
ReLogic.Threading.AsyncActionDispatcher.Dispose
void Dispose()
Definition
AsyncActionDispatcher.cs:89
ReLogic.Threading.AsyncActionDispatcher.IsDisposed
bool IsDisposed
Definition
AsyncActionDispatcher.cs:20
ReLogic.Threading.AsyncActionDispatcher._actionQueue
readonly BlockingCollection< Action > _actionQueue
Definition
AsyncActionDispatcher.cs:12
ReLogic.Threading.AsyncActionDispatcher.Queue
void Queue(Action action)
Definition
AsyncActionDispatcher.cs:24
ReLogic.Threading.AsyncActionDispatcher.Start
void Start()
Definition
AsyncActionDispatcher.cs:29
ReLogic.Threading.AsyncActionDispatcher
Definition
AsyncActionDispatcher.cs:9
System.Collections.Concurrent.BlockingCollection.Add
void Add(T item)
Definition
BlockingCollection.cs:147
System.Collections.Concurrent.BlockingCollection.Take
T Take()
Definition
BlockingCollection.cs:262
System.Collections.Concurrent.BlockingCollection.Dispose
void Dispose()
Definition
BlockingCollection.cs:670
System.Collections.Concurrent.BlockingCollection.Count
int Count
Definition
BlockingCollection.cs:63
System.Collections.Concurrent.BlockingCollection
Definition
BlockingCollection.cs:14
System.InvalidOperationException
Definition
InvalidOperationException.cs:9
System.OperationCanceledException
Definition
OperationCanceledException.cs:10
System.Threading.CancellationTokenSource.Cancel
void Cancel()
Definition
CancellationTokenSource.cs:362
System.Threading.CancellationTokenSource.Token
CancellationToken Token
Definition
CancellationTokenSource.cs:292
System.Threading.CancellationTokenSource.Dispose
void Dispose()
Definition
CancellationTokenSource.cs:442
System.Threading.CancellationTokenSource
Definition
CancellationTokenSource.cs:8
System.Threading.Thread.Join
bool Join(int millisecondsTimeout)
System.Threading.Thread.Start
void Start(object? parameter)
Definition
Thread.cs:574
System.Threading.Thread
Definition
Thread.cs:13
System.IDisposable
Definition
IDisposable.cs:4
ReLogic.Threading
Definition
AsyncActionDispatcher.cs:6
System.Collections.Concurrent
Definition
BlockingCollection.cs:8
System.Diagnostics
Definition
AggregationManager.cs:6
System.Threading
Definition
TaskToApm.cs:3
System.TypeNameKind.Name
@ Name
System.ExceptionArgument.action
@ action
System
Definition
BlockingCollection.cs:8
source
ReLogic
ReLogic.Threading
AsyncActionDispatcher.cs
Generated by
1.10.0