Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
La tarea de recepción asíncrona de WebSocket no tiene prioridad

Estoy usando Fleck (un servidor websocket de C#) para un proyecto que estoy haciendo y me encontré con un problema.

Generalmente, Fleck recibe datos de un socket web usando esta función:

 public Task<int> Receive(byte[] buffer, Action<int> callback, Action<Exception> error, int offset) { try { Func<AsyncCallback, object, IAsyncResult> begin = (cb, s) => _stream.BeginRead(buffer, offset, buffer.Length, cb, s); Task<int> task = Task.Factory.FromAsync<int>(begin, _stream.EndRead, null); task.ContinueWith(t => callback(t.Result), TaskContinuationOptions.NotOnFaulted) .ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); task.ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); return task; } catch (Exception e) { error(e); return null; } }

Para cada mensaje que recibe el websocket, ejecuto una función de trabajador asíncrono que usa algo de CPU.
El problema es que, por alguna razón, cada vez que tengo varias funciones de trabajo en ejecución, esta función Recibir recibe entradas a un ritmo mucho más lento de lo que se envían (a través de Chrome o Firefox).
Estoy buscando una manera de darle prioridad sobre las funciones de trabajo, lo que significa que cada vez que se recibe un mensaje, quiero ejecutar otra función que luego pondrá en cola una nueva función de trabajo.

El motivo es que el websocket se puede cerrar o recibir un mensaje de cancelación, pero el mensaje de cancelación no se lee hasta que casi todos los mensajes se han procesado (decenas de minutos después), lo que hace que no haga casi nada.

He intentado varias formas diferentes de poner en cola las funciones de los trabajadores, que incluyen:

  • Simplemente ejecutando una función y await su resultado
  • Generación de algunos subprocesos de trabajo que repiten la recepción de mensajes a través de AsyncQueue o ConcurrentQueue
  • Uso de TaskFactory.StartNew con una variedad de indicadores, tanto en la función del ejecutor de websocket como en los subprocesos de trabajo
  • Crear un nuevo Thread y darle una prioridad más alta o más baja

Ninguno de estos métodos resolvió el problema.

Creo que estoy malinterpretando algo básico sobre cómo funciona el programador de tareas de C#, pero simplemente no puedo resolverlo.

over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda