Giả sử tôi có một lớp học Repository
có số DbContext
. Trong lớp này, tôi có một phương pháp:Khi nào bạn nên đợi Nhiệm vụ?
public async Task<T> CreateAsync(T obj)
{
var o = _dbSet.Add(obj);
await _dbContext.SaveChangesAsync();
return o;
}
trong một lớp Service
tôi sử dụng phương pháp này để tạo ra một đối tượng:
public async Task<MyObject> Create()
{
return await _repository.CreateAsync(new MyObject());
}
Và cuối cùng trong bộ điều khiển api tôi MyObjectController
tôi trở về đối tượng này như sau:
public async Task<IHttpActionResult> Get()
{
return Ok(await _service.Create());
}
Tôi nhầm lẫn về tất cả các từ khóa async
và await
này. Tôi biết rằng Task
đang chờ. Điều này có nghĩa là tôi chỉ có thể trả lại số Task
từ CreateAsync
mà không phải chờ trong số CreateAsync
hoặc Create
và sau đó cuối cùng chờ nó trong Get
? Liệu nó có tác động tiêu cực đến ứng dụng của tôi mà tôi đang chờ đợi của tôi như trong ví dụ này?
Nó đáng chú ý là nhược điểm để trả lại một công tác mà không cần chờ nó là phương thức được đề cập sẽ không nằm trong callstack async nếu ngoại lệ bị ném –
Điểm tốt, nhưng anh ta đã nói rằng cuối cùng anh ta chờ nó trong phương thức 'Get' để ngoại lệ sẽ bị ném, nhưng tôi sẽ chỉ ra điều đó một cách rõ ràng. –
ngoại lệ sẽ không bị nuốt, nhưng phương pháp không chờ đợi sẽ không xuất hiện trên callstack async (có thể làm cho mọi việc khó khăn hơn để gỡ lỗi) –