2012-11-29 17 views
6

Tôi có một vai trò Azure Worker rằng có ba loại của các quá trình:Khi nào tôi nên sử dụng tùy chọn LongRunning Task Creation?

  • C chủ đề # mà đọc từ cơ sở dữ liệu và ghi vào nhân-input-queue (task1)
  • Java chủ đề mà đọc từ công nhân-input-queue làm việc và ghi vào nhân-ra-queue
  • C# chủ đề mà đọc từ nhân-ra-queue và ghi vào cơ sở dữ liệu (Task2)

Task1 và Task2 chạy vô hạn định và ngủ nếu hàng đợi tương ứng của chúng trống.

Mã của tôi trông như thế này:

SpawnJavaProcesses(); 
Task.Factory.StartNew(Task1); 
Task.Factory.StartNew(Task2); 
while(true) 
{ 
    //do some trivial sporadic work 
    Thread.Sleep(60*1000); 
} 

Câu hỏi của tôi:

  • Tôi có nên sử dụng tùy chọn sáng tạo nhiệm vụ LongRunning khi bắt đầu task1 và Task2?
  • Có cách nào tốt hơn để triển khai những gì tôi đang cố gắng làm ở đây không?
+1

Trong khi điều này hoạt động trên máy đa lõi cục bộ, tôi thấy rằng khi tải lên vai trò Azure lõi đơn, chỉ luồng chính và quy trình Java mới có thời gian thực thi trong khi Task1 và Task2 thì không. Điều này có liên quan đến việc sử dụng các tác vụ trên các hệ thống lõi đơn không? – Gilad

Trả lời

6

Nếu bạn có một vài chuỗi dài chạy thì tốt nhất là sử dụng tùy chọn LongRunning. Bằng cách chọn tùy chọn này, bạn sẽ chạy trong một luồng bên ngoài nhóm luồng. Đây cũng là một cái gì đó là explained by Stephen Toub (từ nhóm Tiện ích mở rộng song song):

Đó không phải là độ dài cụ thể. Nếu bạn đang tạo nhiều tác vụ , LongRunning không phù hợp với chúng. Nếu bạn đang tạo một hoặc hai tác vụ sẽ tồn tại trong một khoảng thời gian tương đối so với thời gian của ứng dụng của bạn, thì LongRunning là điều cần xem xét .

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