Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CloseAsyncPrivate()

async Task System.Net.WebSockets.ManagedWebSocket.CloseAsyncPrivate ( WebSocketCloseStatus closeStatus,
string statusDescription,
CancellationToken cancellationToken )
inlineprivate

Definition at line 1260 of file ManagedWebSocket.cs.

1261 {
1262 if (!_sentCloseFrame)
1263 {
1264 await SendCloseFrameAsync(closeStatus, statusDescription, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
1265 }
1266 if (State == WebSocketState.CloseSent)
1267 {
1268 byte[] closeBuffer = ArrayPool<byte>.Shared.Rent(139);
1269 try
1270 {
1271 while (!_receivedCloseFrame)
1272 {
1274 try
1275 {
1276 await _receiveMutex.EnterAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
1277 try
1278 {
1280 {
1281 receiveTask = ReceiveAsyncPrivate<ValueWebSocketReceiveResult>(closeBuffer, cancellationToken);
1282 }
1283 }
1284 finally
1285 {
1287 }
1288 }
1289 catch (OperationCanceledException)
1290 {
1291 Abort();
1292 throw;
1293 }
1294 await receiveTask.ConfigureAwait(continueOnCapturedContext: false);
1295 }
1296 }
1297 finally
1298 {
1299 ArrayPool<byte>.Shared.Return(closeBuffer);
1300 }
1301 }
1302 lock (StateUpdateLock)
1303 {
1304 DisposeCore();
1305 }
1306 }
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
async ValueTask SendCloseFrameAsync(WebSocketCloseStatus closeStatus, string closeStatusDescription, CancellationToken cancellationToken)
Task EnterAsync(CancellationToken cancellationToken)
Definition AsyncMutex.cs:32
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition ValueTask.cs:312

References System.Net.WebSockets.ManagedWebSocket._receivedCloseFrame, System.Net.WebSockets.ManagedWebSocket._receiveMutex, System.Net.WebSockets.ManagedWebSocket._sentCloseFrame, System.Net.WebSockets.ManagedWebSocket.Abort(), System.cancellationToken, System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Threading.Tasks.ValueTask< TResult >.ConfigureAwait(), System.Net.WebSockets.ManagedWebSocket.DisposeCore(), System.Threading.AsyncMutex.EnterAsync(), System.Threading.AsyncMutex.Exit(), System.Net.WebSockets.ManagedWebSocket.SendCloseFrameAsync(), System.Buffers.ArrayPool< T >.Shared, and System.Net.WebSockets.ManagedWebSocket.StateUpdateLock.

Referenced by System.Net.WebSockets.ManagedWebSocket.CloseAsync().