public sealed class WebSocketInstance
{
private readonly WebSocket _webSocket;
private readonly ILogger<WebSocketInstance> _logger;
private async Task RunWebSocketAsync(CancellationToken cancellationToken)
{
while (_webSocket.State == WebSocketState.Open)
{
byte[] bytes = ArrayPool<byte>.Shared.Rent(4096);
try
{
WebSocketReceiveResult msg = await _webSocket.ReceiveAsync(bytes, cancellationToken);
// parse message into a body variable
await HandleMessageAsync(body.Value, cancellationToken); // I want to avoid await here
}
finally
{
ArrayPool<byte>.Shared.Return(bytes);
}
}
await CloseAsync();
}
private async Task<bool> HandleMessageAsync(ClientMessageBody message, CancellationToken cs)
{
// message handler logic that might call SendAsync and will probably access the this context
}
public async Task SendAsync(ServerMessageBody data, CancellationToken cs)
{
if (_webSocket.State != WebSocketState.Open) return;
// Send logic here
}
}
public sealed class WebSocketInstance
{
private readonly WebSocket _webSocket;
private readonly ILogger<WebSocketInstance> _logger;
private async Task RunWebSocketAsync(CancellationToken cancellationToken)
{
while (_webSocket.State == WebSocketState.Open)
{
byte[] bytes = ArrayPool<byte>.Shared.Rent(4096);
try
{
WebSocketReceiveResult msg = await _webSocket.ReceiveAsync(bytes, cancellationToken);
// parse message into a body variable
await HandleMessageAsync(body.Value, cancellationToken); // I want to avoid await here
}
finally
{
ArrayPool<byte>.Shared.Return(bytes);
}
}
await CloseAsync();
}
private async Task<bool> HandleMessageAsync(ClientMessageBody message, CancellationToken cs)
{
// message handler logic that might call SendAsync and will probably access the this context
}
public async Task SendAsync(ServerMessageBody data, CancellationToken cs)
{
if (_webSocket.State != WebSocketState.Open) return;
// Send logic here
}
}