State machine · async/await
Máy trạng thái trình biên dịch sinh ra cho GetOrderAsync
Máy trạng thái của GetOrderAsync
Phương thức async chạy ở state -1, mỗi await chưa xong chuyển máy sang trạng thái treo 0 hoặc 1 mà không giữ thread nào, khi I/O xong một thread bất kỳ chạy tiếp, và biến cục bộ sống qua await được nâng thành field trên heap.
GỌI HÀM
AWAIT 1
I/O XONG
AWAIT 2
I/O XONG
RETURN
NÂNG LÊN
Treo ở await 1
state = 0 · FindAsync
không thread nào chờ
Treo ở await 2
state = 1 · GetAsync
không thread nào chờ
Đang chạy MoveNext()
state = -1
sau await: có thể thread khác
Task hoàn thành
return order / null
Field của máy trạng thái
biến sống qua await
CHÚ GIẢI
Đang treo: thread đã về pool
Chuyển trạng thái
Nằm trên heap
Lưu lại qua await
© tiennhm