Which code will block the current thread?
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi (wait) trong lập trình đa luồng. Trong lập trình đa luồng, các phương thức chờ đợi được sử dụng để ngăn chặn luồng hiện tại (thread) thực hiện các tác vụ khác cho đến khi một tác vụ cụ thể được hoàn thành. Có hai phương thức chờ đợi được sử dụng trong câu hỏi này: await task; và task.Wait();. await task; là một phương thức chờ đợi non-bloc (non-blocking), nó cho phép luồng hiện tại thực hiện các tác vụ khác trong khi chờ đợi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ không bị chặn. task.Wait(); là một phương thức chờ đợi bloc (blocking), nó sẽ ngăn chặn luồng hiện tại thực hiện các tác vụ khác cho đến khi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ bị chặn.
task.ContinueWith(...) và await Task.WhenAll(tasks); không phải là phương thức chờ đợi, mà là các phương thức được sử dụng để thực hiện các tác vụ khác khi một tác vụ được chờ đợi được hoàn thành hoặc khi tất cả các tác vụ được chờ đợi được hoàn thành.
Tóm lại, để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi non-bloc và bloc trong lập trình đa luồng.