Vì vậy, tôi đã được cho biết những gì tôi đang làm ở đây là sai, nhưng tôi không chắc chắn tại sao.Chủ đề nền có phải là ý tưởng tồi không? Tại sao?
Tôi có trang web nhập tệp CSV có số tài liệu để thực hiện thao tác tốn kém. Tôi đã đưa hoạt động đắt tiền vào một chủ đề nền để ngăn chặn nó khỏi chặn ứng dụng. Đây là những gì tôi có trong một nutshell.
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();
}
}
(rõ ràng là với một số kiểm tra lỗi & thông điệp cho người dùng ném vào)
Vì vậy, câu hỏi ba lần của tôi là:
- a) Đây có phải là một ý tưởng tồi?
- b) Tại sao đây là một ý tưởng tồi?
- c) Bạn sẽ làm gì thay thế?
Nhưng 'BackgroundWorker' sử dụng chuỗi chủ đề' ThreadPool', không nên được sử dụng cho các hoạt động dài hạn. – Toby
Bạn có tham khảo về điều này không? –
Nó cũng phụ thuộc vào định nghĩa "dài hạn". Có sự khác biệt giữa "đủ dài, chúng tôi không muốn khiến người dùng ngồi và chờ" và "giờ hoặc ngày". –