2013-03-17 18 views
20

Sử dụng mã như mã bên dưới, chuỗi mới có được tự tạo sau khi hàm trả về không?Tôi có cần phải giết một sợi được viết như thế này không? Hay nó sẽ tự động kết thúc?

new Thread(() => 
{ 
    function(); 
}).Start(); 

Tôi khá mới mẻ về luồng, vì vậy tôi tự hỏi.

+0

Bạn nên quản lý các chủ đề của mình; bất kể bạn gọi chúng như thế nào. Garbage Collection thực hiện tốt công việc quản lý các đối tượng ngoài phạm vi, nhưng đó không phải là sự thay thế cho các thực hành mã hóa tốt. – Brian

+1

Nó sẽ tự kết thúc, nhưng bạn có thể muốn biến nó thành một chuỗi nền để nó kết thúc nếu ứng dụng được đóng lại thay vì giữ nó bí mật còn sống. Tùy thuộc vào tình hình, mặc dù. – Ryan

+1

@Brian: Điều đó có nghĩa là gì và bộ sưu tập rác thải phải làm gì với bất kỳ thứ gì? – Ryan

Trả lời

15

Đó là tốt ... nếu đó là một mối quan ngại rằng các Chủ đề có thể không hoàn thành trước khi thực thi của bạn bỏ, bạn có thể muốn:

new Thread(() => 
    { 
     function(); 
    }){IsBackground = true}.Start(); 

đề Bối cảnh sẽ không ngăn cản ứng dụng của bạn thoát khỏi.

+0

cảm ơn người tiêu dùng, tôi nghĩ rằng trường hợp duy nhất mà tôi sẽ có một chủ đề thử và outlast thực thi là nếu thực thi bất ngờ tai nạn hoặc một số sự kiện freak khác. – PhoenixLament

2

Có, chuỗi sẽ kết thúc sau khi hàm hoàn tất, nhưng trừ khi bạn có tham số bạn cần sử dụng bên trong hàm tôi sẽ không bắt đầu nó như thế; Tôi sẽ chỉ làm:

new Thread(function).Start(); 
+0

Trong hầu hết các trường hợp, bạn không nên bắt đầu chuỗi mới như thế này. Kiểm tra TPL là gì. – vittore

+0

cảm ơn, tôi có một số trường hợp mã tôi đăng với các thông số, vì vậy tôi đoán phương pháp của tôi cho điều đó là chính xác? – PhoenixLament

+1

Có. tôi sử dụng đa luồng ứng dụng của tôi tất cả các thời gian và thường tôi cố gắng tránh có các tham số để bắt đầu với trong chủ đề mới. bắt đầu chủ đề là rất đơn giản và thường bạn sẽ chỉ cần "giết" chúng nếu họ đang looping nơi họ sẽ không kết thúc bản thân mình. – Naate

2

Mặc dù được coi là thực hành tốt nhất để quản lý chuỗi của bạn

Cần xem xét xem bạn có cần một chuỗi chuyên dụng cho những gì bạn đang làm hay không. Nếu mã bạn đang chạy tương đối nhỏ, bạn có thể cân nhắc sử dụng ThreadPool qua số TPL hoặc QueueUserWorkItem thay thế.

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