internal void send(DispathArgs data)
 {
     /*
      * Тут должен быть планировщик нагрузки и т.д.
      */
     if (data.Devices == null)
     {
         //broadcast
         sessions.BroadcastAsync(data.Data, () => {
             /* action */
         }); //Эта хуйня отправит и тем кто ещё не прошёл аутентификацию
         foreach (var device in DeviceManager.DeviceList)
         {
             if (device.IsAuth)
             {
                 device.SendData(data.Data);
             }
         }
     }
     else
     {
         foreach (var device in data.Devices)
         {
             device?.SendData(data.Data);
         }
     }
 }
        private void sendAsync(DispathArgs data)
        {
            /*
             * Тут должен быть планировщик нагрузки и т.д.
             */

            //Заюзать Task?
            ThreadPool.QueueUserWorkItem(
                state => send(data)
                );
        }
 public void Send(DispathArgs data)
 {
     if (data == null || data.Data == null)
     {
         throw new ArgumentNullException("error"); //TODO:
     }
     if (webSocket.IsListening != true)
     {
         throw new Exception("Server is not running"); //TODO:
     }
     sendAsync(data);
 }