Đượ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
/ await
nhiề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 await
là 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 async
cuộc gọi, và hết việc await
nà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 await
cuộ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 Task
phươ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?