es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice el multihilo en .net webapi.

En mi web api de dot net core, conozco el número de hilos de CPU disponibles y el número de datos que se tienen que procesar. Digamos que tengo 8 hilos para 800 solicitudes de actualización de datos. ¿Cómo puedo hacer algo para que cada hilo maneje 100 solicitudes de actualización de datos en paralelo?

(Soy completamente nuevo en la multiprocesamiento en .NET core y me gustaría tener un enlace de tutorial para principiantes si no quiere compartir código).

Aquí está mi código:

[HttpPatch(“UpdateExams”)]
public async Task < ActionResult < ResponseDto2 >> UpdateExam([FromBody] List < Exam > input) {
// Conozco el número de hilos — digamos 8
int tc = Process.GetCurrentProcess().Threads.Count;
// Conozco el número de entradas — digamos 800
int ic = input.Count;
// ¿Cómo puedo distribuir 100 solicitudes de actualización de datos por núcleo para que se ejecuten en paralelo?
// Nota: es una operación de actualización de datos

// A continuación se muestra mi código actual de api
using
var transaction = _context.Database.BeginTransaction();
try {

    foreach(var item in input) {
        Exam exam = await _context.Exams.Where(i => i.FormNo == item.FormNo && i.RegNo == item.RegNo).FirstOrDefaultAsync();
        if (exam != null) {
            exam.ExamRollno = item.ExamRollno;
            _context.Exams.Update(exam);
            await _context.SaveChangesAsync();
        }
    }
    transaction.Commit();
} catch (Exception e) {
    return StatusCode(StatusCodes.Status500InternalServerError, new ResponseDto2 {
        Message = "Algo salió mal. Por favor, inténtelo de nuevo más tarde",
            Success = false,
            Payload = new {
                e.StackTrace,
                    e.Message,
                    e.InnerException,
                    e.Source,
                    e.Data
            }
    });
}
return StatusCode(StatusCodes.Status200OK, new ResponseDto2 {
    Message = "Datos actualizados correctamente",
        Success = true,
        Payload = null
});

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el método Parallel.ForEach para procesar los datos en paralelo. Este método permite especificar el número de hilos a utilizar y la cantidad de datos a procesar. También puede especificar la cantidad de datos a procesar por hilo.

    Aquí hay un ejemplo de cómo puede utilizar Parallel.ForEach para procesar los datos en paralelo:

    Parallel.ForEach(input, new ParallelOptions { MaxDegreeOfParallelism = 8 }, item => 
    {
        Exam exam = await _context.Exams.Where(i => i.FormNo == item.FormNo && i.RegNo == item.RegNo).FirstOrDefaultAsync();
        if (exam != null) 
        {
            exam.ExamRollno = item.ExamRollno;
            _context.Exams.Update(exam);
            await _context.SaveChangesAsync();
        }
    });
    

    Para obtener más información sobre el multiprocesamiento en .NET Core, puede consultar la documentación de Microsoft.

Comments are closed.