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
});
}
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:Para obtener más información sobre el multiprocesamiento en .NET Core, puede consultar la documentación de Microsoft.