2012-01-10 20 views
9

Tôi đã thử một số googling về chủ đề này nhưng tôi muốn có thêm thông tin.Khi nào ASP.NET sẽ xóa một chuỗi mới?

Tôi đang cố bắt đầu một chuỗi mới bên trong ứng dụng ASP.NET sẽ xử lý một số công việc mất nhiều thời gian. Nếu tôi đặt điều này trong web.config của tôi:

<httpRuntime executionTimeout="5" /> 

Yêu cầu thông thường sẽ hết thời gian sau 5 giây. Hãy nhớ điều này là để thử nghiệm. Khi tôi bắt đầu một chủ đề mới từ mã:

var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime)); 
    testThread.Start(); 

chủ đề này sẽ chạy lâu hơn 5 secounds, đó là những gì tôi muốn. NHƯNG. Trong bao lâu nó sẽ chạy? Hãy nói rằng chủ đề này mất 5h (giống như một ví dụ). Khi nào sợi sẽ bị giết? Nó sẽ chạy cho đến khi hồ bơi ứng dụng được tái chế? Hoặc có cái gì khác mà giết chết chủ đề này?

+0

Hãy dùng thử, xem điều gì sẽ xảy ra. (Để cho chuỗi mới ghi thời gian vào một tập tin văn bản) EDIT: kiểm tra xem có sự khác biệt nào giữa việc sử dụng Thread và Task hay không. – ZippyV

+0

Đó là điều tôi muốn nhưng tôi muốn một số understading hơn. Các đường nối thread chạy, nhưng tôi muốn biết thêm về những gì có thể đi sai và những gì cần tìm kiếm. –

Trả lời

9

ASP.NET không có kiến ​​thức về chuỗi mà bạn đã tạo - nó sẽ chạy cho đến khi AppPool được tái chế hoặc hoàn thành.

Vì ASP.Net không có kiến ​​thức về chủ đề này, nên có thể bị hủy bỏ đột ngột tại bất kỳ thời điểm nào nếu máy chủ cho rằng nó nên tái chế AppPool, đây không phải là điều tốt! Phil Haack wrote a blog post về cách đăng ký sự kiện 'AppDomainIsGoingDown'.

Liên quan đến những gì có thể gây ra điều này, tôi khuyên bạn nên đọc blog post by Tess Ferrandez này, nhưng trong một nutshell đó là:

  • Nó đã được lên kế hoạch để làm như vậy
  • Machine.config, Web .Config hoặc Global.asax được sửa đổi
  • Thư mục bin hoặc nội dung của nó được sửa đổi
  • Số lần biên dịch lại (aspx, ascx hoặc asax) vượt quá giới hạn được chỉ định bởi cài đặt trong machine.config hoặc web.config (theo mặc định này được thiết lập đến 15)
  • Đường dẫn vật lý của thư mục ảo được sửa đổi
  • Chính sách CAS được sửa đổi
  • Các dịch vụ web được khởi động lại
  • (2,0 chỉ) Ứng dụng Sub-Thư mục được xóa
+0

Vì vậy, điều đó có nghĩa rằng điều này "exemple" -read sẽ chạy trong 5h. GC có chăm sóc nội dung khi chuỗi này tuân thủ hoặc tôi có cần giải phóng tài nguyên theo bất kỳ cách nào không? –

+1

@MarkusKnappenJohansson Chuỗi sẽ chạy cho đến khi nó hoàn thành hoặc AppPool bị tắt. Tất cả các tài nguyên có được trong suốt thời gian tồn tại của luồng được quản lý, tất cả GC cần thiết vẫn sẽ được thực hiện. –

+0

So. Về thực tế là các chủ đề có thể bị hủy bỏ bởi máy chủ. Điều này có xảy ra là thread thực sự đang làm việc với một cái gì đó? Hoặc chỉ nếu nó nhàn rỗi? Có cách nào để "bảo vệ" chống lại điều này? –

Các vấn đề liên quan