So wurde mir gesagt, was ich hier mache, ist falsch, aber ich bin mir nicht sicher warum.Sind Hintergrundthreads eine schlechte Idee? Warum?
Ich habe eine Webseite, die eine CSV-Datei mit Dokumentnummern importiert, um eine teure Operation durchzuführen. Ich habe die teure Operation in einen Hintergrund-Thread eingefügt, um zu verhindern, dass die Anwendung blockiert wird. Hier ist, was ich kurz gesagt habe.
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();
}
}
(natürlich mit einem gewissen Fehlerprüfung & Nachrichten für Benutzer geworfen)
Also meine dreifache Frage:
- a) Ist dies eine schlechte Idee?
- b) Warum ist das eine schlechte Idee?
- c) Was würden Sie stattdessen tun?
Aber 'BackgroundWorker' verwendet' ThreadPool'-Threads, die nicht für lang andauernde Operationen verwendet werden sollten. – Toby
Haben Sie eine Referenz? –
Es hängt auch von der Definition von "long-running" ab. Es gibt einen Unterschied zwischen "lange genug wollen wir den Benutzer nicht sitzen lassen und darauf warten" und "Stunden oder Tage". –