Giả sử có một thư viện phục vụ với một phương pháp như thế nàyReturn Task hoặc chờ đợi và ConfigureAwait (false)
public async Task<Person> GetPersonAsync(Guid id) {
return await GetFromDbAsync<Person>(id);
}
Sau khi thực hành tốt nhất cho SynchronizationContext là tốt hơn để sử dụng
public async Task<Person> GetPersonAsync(Guid id) {
return await GetFromDbAsync<Person>(id).ConfigureAwait(false);
}
Nhưng khi bạn chỉ có một hoạt động (tôi nghĩ) là tốt hơn để trả lại tác vụ trực tiếp. Xem At the end of an async method, should I return or await?
public Task<Person> GetPersonAsync(Guid id) {
return GetFromDbAsync<Person>(id);
}
Trong trường hợp cuối cùng này, bạn không thể sử dụng ConfigureAwait (false) vì phương pháp này là không chờ đợi.
Giải pháp tốt nhất (và lý do) là gì?
Tôi nghĩ người cuối cùng (phái đoàn) là rõ ràng nhất và không liên quan đến việc tạo ra máy nhà nước bổ sung. Trừ khi bạn đang làm * cái gì khác * bên trong phương thức phụ thuộc vào kết quả cuộc gọi không đồng bộ, tôi không thấy điểm nào trong việc sử dụng 'await'. –
Điều cuối cùng có ý nghĩa nhất đối với tôi. Nó trả về một nhiệm vụ mà bạn có thể chờ đợi từ bất cứ nơi nào bạn đang gọi GetPersonAsync –
Vì vậy, giải pháp trả lại tác vụ trực tiếp không nắm bắt được SynchronizationContext? – sevenmy