53

tôi có một cái nhìn cục bộ mà cố gắng để lấy một IEnumerable<Post> từ cơ sở dữ liệu sử dụng async ...Async PartialView gây "HttpServerUtility.Execute chặn ..." ngoại lệ

Phương pháp

public static class PostService 
{ 
    public static int PostsPerPage = 50; 

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0) 
    { 
     return await entityFrameworkDbContext.Posts 
      .ToListAsync(); 
    } 
} 

PartialView

public async Task<ActionResult> Recent(int page = 0) 
{ 
    return PartialView(await PostService.GetRecentAsync(page)); 
} 

Và sau đó nếu tôi cố gắng gọi nó là

@Html.Action("Recent", "Post") 

tôi nhận được ngoại lệ sau đây

HttpServerUtility.Execute chặn trong khi chờ đợi một hoạt động không đồng bộ để hoàn thành.

Mô tả: Một ngoại lệ không được xử lý xảy ra trong khi thực hiện yêu cầu web hiện tại. Vui lòng xem lại dấu vết ngăn xếp để biết thêm thông tin về lỗi và vị trí bắt nguồn từ mã.

Chi tiết ngoại lệ: System.InvalidOperationException: HttpServerUtility.Execute bị chặn trong khi chờ thao tác không đồng bộ hoàn tất.

Tại sao tôi gặp lỗi này? Nó có nên hoạt động không?

Trả lời

69

Hành động con phải được gọi đồng bộ. Issue 601 Tôi cũng không biết bất kỳ cập nhật gần đây nào cho các thư viện MVC hiện tại cho phép chức năng này.

Nhận xét về Số 601, gợi ý về chức năng này đang được thêm vào trong MVC vNext, aka. MVC6. Các hành động con có thể được thay thế bằng ViewComponent có thể được gọi không đồng bộ từ chế độ xem như dưới đây. ví dụ đầy đủ herehere

<div> 
@await Component.InvokeAsync("YourComponent") 
</div> 

Để biết thêm về MVC6 kiểm tra, http://www.asp.net/vnext/overview/aspnet-vnext/overview

Lưu ý: Câu trả lời này chỉ là một hình thức, vì vậy câu hỏi có thể được đánh dấu là đã trả lời

Các vấn đề liên quan