Nói cách khác, làĐang gọi Task.Wait() ngay sau khi hoạt động không đồng bộ tương đương với việc chạy cùng một thao tác đồng bộ?
var task = SomeLongRunningOperationAsync();
task.Wait();
chức năng giống với
SomeLongRunningOperation();
Nói cách khác, là
var task = SomeOtherLongRunningOperationAsync();
var result = task.Result;
chức năng giống với
var result = SomeOtherLongRunningOperation();
Theo Task.Wait and Inlining, nếu Tác vụ là Wait
’đã bật đã bắt đầu thực hiện, Wait
phải chặn. Tuy nhiên, nếu nó chưa bắt đầu thực hiện, Wait
có thể kéo tác vụ đích ra khỏi bộ lập lịch mà nó được xếp hàng đợi và thực thi nó nội dòng trên luồng hiện tại.
Hai trường hợp đó chỉ là vấn đề quyết định chuỗi nào Task sẽ chạy và nếu bạn vẫn đang chờ kết quả, có quan trọng không?
Có lợi ích gì khi sử dụng biểu mẫu không đồng bộ trên biểu mẫu đồng bộ, nếu không có gì thực hiện giữa cuộc gọi không đồng bộ và Wait()
?
Vì SomeLongRunningOperation trả về một số kết quả, tôi giả sử bạn có nghĩa là 'var result = task.Result' – EZI
Vâng, đúng vậy. –
Task.Result là một op chặn. Không cần phải 'Chờ đợi() ' – EZI