2012-10-23 38 views
7

Hãy xem xét mã này:Chúng tôi có cần sử dụng từ khóa không đồng bộ không?

public async Task TheBestMethodEver1() 
{ 
// code skipped 
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
{ 
    // code skipped 
}); 

}

public Task TheBestMethodEver2() 
{ 
    // code skipped 
    return Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
    { 
    // code skipped 
    }).AsTask(); 
} 

Bất kỳ của những phương pháp này có thể được gọi như:

await TheBestMethodEverX(); 

sự khác biệt giữa hai phương pháp và lý do tại sao những là gì Tôi có nên dùng cái đầu tiên thường không?

Trả lời

2

Sự khác nhau giữa hai phương pháp này là gì và tại sao tôi nên sử dụng phương pháp đầu tiên?

Thứ nhất có máy trạng thái do trình biên dịch tạo và tạo thêm rác trên heap. Do đó, giây thứ hai được ưu tiên hơn.

Để biết thêm thông tin, hãy xem video cổ điển Zen of Async.

0

Nếu chờ đợi duy nhất là báo cáo cuối cùng (và bạn đang chờ một công việc, trái với một số đối tượng đang chờ khác), bạn cũng có thể bỏ qua và chỉ trả lại tác vụ. Thật dễ dàng để thêm công cụ sửa đổi không đồng bộ, nó sẽ cần thiết trong tương lai.

+0

Tất nhiên, tôi có thể thực hiện bất kỳ phương pháp nào, nhưng đây là câu hỏi tư tưởng. Cách nào được ưa thích hơn và tại sao? Thực hành tốt nhất là gì? –

+0

@ A-student: câu trả lời bạn đang trả lời cho thấy rằng 'await' của bạn là dư thừa và có thể bị bỏ qua. Là dư thừa không phải là một lý do tốt để thích giải pháp đó? –

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