Được rồi, nghe có vẻ kỳ quặc, nhưng mã rất đơn giản và giải thích tình huống tốt.
public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role)
{
AssertNotDisposed();
var roles = await GetRolesForUser(user);
roles.Roles = RemoveRoles(roles.Roles, role);
await Run(TableOperation.Replace(roles));
}
. nó cho chính xác khi xem mẫu async / await.)
Tôi bắt gặp mô hình này ngày càng thường xuyên hơn khi tôi đang sử dụng async/ awaitnhiều hơn nữa. Mẫu bao gồm chuỗi các sự kiện sau:
- Chờ đợi một cuộc gọi ban đầu giúp tôi có một số thông tin tôi cần để làm việc
- Làm việc trên thông tin đó một cách đồng bộ
- Chờ cuộc gọi cuối cùng để lưu công việc được cập nhật
Khối mã ở trên thường là cách tôi xử lý các phương thức này. Tôi awaitlà cuộc gọi đầu tiên, mà tôi phải thực hiện vì nó không đồng bộ. Tiếp theo, tôi thực hiện công việc mà tôi cần làm không phải là IO hoặc tài nguyên bị ràng buộc và do đó không đồng bộ. Cuối cùng, tôi lưu lại công việc của mình, đó cũng là một asynccuộc gọi, và hết việc awaitnày.
Nhưng đây có phải là cách hiệu quả / chính xác nhất để xử lý mẫu này? Dường như với tôi, tôi có thể bỏ qua awaitcuộc gọi cuối cùng, nhưng nếu nó thất bại thì sao? Và tôi có nên sử dụng một Taskphương pháp như ContinueWithđể xâu chuỗi công việc đồng bộ của mình với cuộc gọi ban đầu không? Tôi chỉ đang ở một thời điểm mà tôi không chắc liệu mình có xử lý việc này một cách chính xác hay không.
Lấy mã trong ví dụ , có cách nào tốt hơn để xử lý chuỗi cuộc gọi phương thức async / sync / async này không?