Tôi đã sử dụng Dapper và có nó trả về một IEnumerable động, như thế này:Tại sao First() hoặc ElementAt() trên một IEnumerable động đang chờ?
var rows = conn.Query("SELECT * FROM T WHERE ID = @id", new { id = tableId });
var row = rows.FirstOrDefault();
Ở đây, rows
là loại IEnumerable<dynamic>
. Các IntelliSense nói FirstOrDefault()
là awaitable, và có cách sử dụng await FirstOrDefault()
. Không phải tất cả các truy vấn LINQ đều được hiển thị là có thể chờ đợi, nhưng có vẻ như đặc biệt là các truy vấn đơn lẻ.
Ngay khi tôi sử dụng gõ mạnh, hành vi này biến mất.
Có phải vì .NET không biết liệu kiểu bạn nhận được trong thời gian chạy có đang chờ hay không, sao cho nó "cho phép" trong trường hợp bạn cần? Nhưng không thực thi nó? Hoặc tôi phải, do một số hành vi thời gian chạy ngôn ngữ động, thực sự sử dụng await
ở đây?
Tôi đã tiếp tục tìm kiếm nhưng không tìm thấy điều nhỏ nhất về trực tuyến này.
bạn có thể chờ đợi từ sự trở lại năng động. tôi đoán nó sẽ ném ngoại lệ nếu loại không phải là một nhiệm vụ. Edit: tôi đã thử nghiệm nó. nó sẽ ném ngoại lệ nếu động không phải là Nhiệm vụ hoặc Nhiệm vụ. –
Bạn có thể gọi 'GetAwaiter() 'trên' dynamic', do đó, có nó awaitable. – PetSerAl