2012-09-18 31 views
6

Tôi đã "google" nhưng vẫn nhầm lẫn với công tác, chủ đề, và Worker Bối cảnh .....C#/VB.Net công tác vs Chủ đề vs BackgroundWorker

  1. là "Task là một API cấp cao chạy trên chuỗi hiện tại "chính xác?

  2. Nếu 1 là đúng, tại sao tôi cần phải sử dụng lời gọi để thay đổi giao diện người dùng bên trong tác vụ tại cùng một chuỗi?

  3. Nhân viên làm việc chỉ được ưu tiên thấp nhất trong ứng dụng? Vì vậy, hiệu suất của backgroundworker thấp hơn so với nhiệm vụ và thread? Đúng ?

  4. Cuối cùng, trong ứng dụng của tôi, tôi cần nhận chuỗi từ máy chủ bằng cách sử dụng "HttpWebRequest", sau khi phân tích cú pháp chuỗi và cập nhật giao diện người dùng. Nếu tôi sử dụng "HttpWebRequest.BeginGetResponse" để chờ kết quả async và kích hoạt một sự kiện hoàn chỉnh để cập nhật giao diện người dùng, tôi cần sử dụng phương thức gọi để gọi điều khiển chuỗi giao diện người dùng, nhưng tôi có thể sử dụng công nhân nền thay vì không? Tôi chỉ có thể thay đổi giao diện người dùng trong sự kiện "RunWorkerCompleted", có bất kỳ bất lợi nào không?

Xin lỗi vì hồ bơi của tôi bằng tiếng Anh và cảm ơn bạn đã trợ giúp ...!

+0

Nhiệm vụ sử dụng luồng trong hậu trường, chúng không bị giới hạn đối với chuỗi hiện tại gọi chúng –

Trả lời

4

1) Không, Tác vụ theo mặc định sẽ chạy trên chuỗi chủ đề chuỗi. Tuy nhiên, bạn có thể cung cấp một trình lên lịch khác có thể chạy các tác vụ khác nhau.

3) Không có sự khác biệt về mức độ ưu tiên theo mặc định. BackgroundWorker cũng chạy trên một thread thread thread.

4) Sử dụng TaskFactory.FromAsync là một cách khá đơn giản để xử lý các yêu cầu web không đồng bộ:

Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null) 
    .ContinueWith(
     t => 
     { 
      using (var response = (HttpWebResponse)t.Result) 
      { 
       // Do your work 
      } 
     }, 
     TaskScheduler.FromCurrentSynchronizationContext() 
    ); 

Sử dụng TaskScheduler.FromCurrentSynchronizationContext đảm bảo rằng các callback trong ContinueWith được gọi trên thread hiện hành. Vì vậy, nếu tác vụ được tạo trên chuỗi giao diện người dùng, phản hồi sẽ được truy xuất trong nền và sau đó được xử lý trên chuỗi giao diện người dùng.

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