Quindi mi è stato detto che quello che sto facendo qui è sbagliato, ma non sono sicuro del perché.I thread di background sono una cattiva idea? Perché?
Ho una pagina Web che importa un file CSV con numeri di documento per eseguire un'operazione costosa. Ho inserito l'operazione costosa in un thread in background per impedirne il blocco dell'applicazione. Ecco cosa ho in poche parole.
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();
}
}
(ovviamente con qualche errore di controllo & messaggi per gli utenti gettati in)
Quindi la mia domanda è triplice:
- a) Si tratta di una cattiva idea?
- b) Perché questa è una cattiva idea?
- c) Cosa faresti invece?
Ma '' BackgroundWorker' utilizza ThreadPool' discussioni, che non dovrebbero essere utilizzate per operazioni di lunga durata. – Toby
Avete un riferimento per questo? –
Dipende anche dalla definizione di "long-running". C'è una differenza tra "abbastanza a lungo non vogliamo far sedere e aspettare l'utente" e "ore o giorni". –