Nghĩ rằng tôi đã được xử lý trên ConfigureAwait
, sau đó tôi đã thử nghiệm.C# Task ConfigureAwait
Sự hiểu biết của tôi là ConfigureAwait(false)
sẽ chỉ tạo sự khác biệt nếu có ngữ cảnh đồng bộ hóa.
ASP, WPF, v.v. phải có ngữ cảnh, nhưng không nên sử dụng ứng dụng điều khiển và ứng dụng dịch vụ.
Để xem cách nó hoạt động tôi đã thực hiện một ứng dụng Web API và bao gồm các phương pháp sau đây:
// GET api/values/5
public async Task<string> Get (int id)
{
var syncCtx = SynchronizationContext.Current;
int startThreadId = Thread.CurrentThread.ManagedThreadId;
await Task.Delay(TimeSpan.FromSeconds(3)).ConfigureAwait(true);
int endThreadId = Thread.CurrentThread.ManagedThreadId;
return "Start Thread ID: " + startThreadId.ToString() +
": End Thread ID: " + endThreadId.ToString();
}
dự đoán của tôi là không có ConfigureAwait
hoặc ConfigureAwait
thiết lập để true
, tôi sẽ thấy cùng một ID chủ đề trước và sau khi chờ đợi.
Một vài thử nghiệm đầu tiên của tôi cho thấy chính xác điều đó với bộ đúng như trên.
Chạy sau mã bắt đầu và kết thúc trên các id chuỗi khác nhau bất kể ConfigureAwait
.
Tôi đã thêm syncCtx
để thuyết phục bản thân mình Tôi có ngữ cảnh.
Thông báo trước tôi đã đọc là nếu tác vụ đã hoàn tất, bạn sẽ không được bảo đảm cùng một ID. Đó có phải là trường hợp ở đây không? Nếu vậy, tại sao là trường hợp?
Tôi đã thiết lập thử nghiệm ngây thơ hoặc thiếu sót chưa? Nếu vậy, thử nghiệm thích hợp là gì?
Tôi bắt đầu xuống đường dẫn này trong ứng dụng giao diện điều khiển/dịch vụ và nhận ra rằng tôi không nhận được cùng một ID luồng. Tôi đã thêm ConfigureAwait(false)
như được đề xuất trong hầu hết các bài viết "thực hành tốt nhất" mà tôi đã xem. Vì tôi thích xem mọi thứ thực sự hoạt động như thế nào, tôi đã thử kiểm tra ID chủ đề. Nhìn thấy chúng khác nhau đã dẫn tôi qua một số tìm kiếm dẫn đến mã trên.
Chỉ cần làm rõ tôi không * cố gắng * để có được cùng một chuỗi, chỉ cần cố gắng khắc phục sự hiểu lầm của tôi về hành vi của ConfigureAwait. – jeffa00
Thats tốt, tôi vẫn sẽ đọc bài báo tạp chí MSDN. Nó bao gồm các chủ đề này khá tốt. –
Tôi chắc chắn có kế hoạch đọc bài viết đó. Cảm ơn các liên kết. – jeffa00