Implementar un tipo de tarea asíncrona personalizada y esperar

2020-06-30 c++ async-await

Estoy desarrollando una aplicación C ++ en la que necesito recibir mensajes de un MQ y luego analizarlos de acuerdo con su tipo y, por una razón particular, quiero que este proceso (recibir un solo mensaje seguido de procesarlo) sea asíncrono. Como quiero mantener las cosas lo más simples posible de manera que el próximo desarrollador no tenga problemas para continuar con el código, he escrito una clase muy pequeña para implementar Asynchrony.

Primero levanto un nuevo hilo y paso una función al hilo:

task = new thread([&] {
   result = fn();
    isCompleted = true;
});
task->detach();

y para esperar la tarea hago lo siguiente:

while (!isCompleted && !(*cancelationToken))
{
    Sleep(5);
}
state = 1; // marking the task as completed

Hasta ahora no hay ningún problema y no me he enfrentado a ningún error o error, pero no estoy seguro de si esta es "una buena manera de hacer esto" y mi pregunta se centra en determinar esto.

Answers

Lea sobre std :: future y std :: async .

Si su tarea se ejecuta en otro núcleo o procesador, la variable isCompleted puede no sincronizarse y tener dos copias en el caché central. Por lo tanto, puede estar esperando más de lo necesario.

Si tiene que esperar algo, es mejor usar un semáforo .

Como se dijo en los comentarios, el uso de métodos estándar es mejor de todos modos.

Related