Así que me han dicho que lo que estoy haciendo aquí está mal, pero no estoy seguro de por qué.¿Los hilos de fondo son una mala idea? ¿Por qué?
Tengo una página web que importa un archivo CSV con números de documentos para realizar una operación costosa. Puse la costosa operación en una cadena de fondo para evitar que bloqueara la aplicación. Esto es lo que tengo en pocas palabras.
protected void ButtonUpload_Click(object sender, EventArgs e)
{
if (FileUploadCSV.HasFile)
{
string fileText;
using (var sr = new StreamReader(FileUploadCSV.FileContent))
{
fileText = sr.ReadToEnd();
}
var documentNumbers = fileText.Split(new[] {',', '\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
ThreadStart threadStart =() => AnotherClass.ExpensiveOperation(documentNumbers);
var thread = new Thread(threadStart) {IsBackground = true};
thread.Start();
}
}
(obviamente, con un poco de comprobación de errores & mensajes para los usuarios tirado)
Así que mi pregunta es triple:
- a) ¿Es esta una mala idea?
- b) ¿Por qué es esta una mala idea?
- c) ¿Qué harías en su lugar?
Pero 'BackgroundWorker' usa subprocesos' ThreadPool', que no deben usarse para operaciones de larga ejecución. – Toby
¿Tiene una referencia para esto? –
También depende de la definición de "larga duración". Hay una diferencia entre "lo suficientemente largo como para no hacer que el usuario se siente y esperar" y "horas o días". –