Sequence · .Result trên context một thread
Vì sao .Result treo cứng WPF và ASP.NET Framework
Trình tự deadlock khi gọi .Result
await bắt SynchronizationContext, .Result block chính thread đó, continuation được Post về context nhưng cần đúng thread đang bị block, nên hai bên chờ nhau mãi.
1 · GetCustomerAsync(id)
2 · AWAIT BẮT CONTEXT
3 · .Result BLOCK THREAD
HTTP XONG
4 · POST CONTINUATION
CONTINUATION NẰM CHỜ
5 · CẦN ĐÚNG THREAD NÀY
CHỜ TASK HOÀN THÀNH
UI / request thread
WPF · ASP.NET Framework
SynchronizationContext
1 thread tại một thời điểm
Thread pool
nơi HTTP call hoàn thành
Thread chờ Task, Task chờ continuation, continuation chờ thread: không ai nhường.
© tiennhm