private Task Send(IMode content) { return(Task.Run(() => { if (_Socket.State == WebSocketState.Open) { var messageBuffer = Encoding.UTF8.GetBytes(content.GetContent()); var messagesCount = (int)Math.Ceiling((double)messageBuffer.Length / _SendChunkSize); for (var i = 0; i < messagesCount; i++) { int offset = _SendChunkSize * i; int count = _SendChunkSize; bool isEndOfMessage = (i + 1) == messagesCount; if ((count * (i + 1)) > messageBuffer.Length) { count = messageBuffer.Length - offset; } _Socket.SendAsync(new ArraySegment <byte> (messageBuffer, offset, count), WebSocketMessageType.Text, isEndOfMessage, _TokenSource.Token).Wait(); } } }, _TokenSource.Token)); }