Async PartialView, "HttpServerUtility.Execute engellendi ..." istisnasına neden oluyor


85

Zaman IEnumerable<Post>uyumsuz kullanarak veritabanından bir almaya çalışan kısmi bir görünümüm var ...

Yöntem

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

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

Kısmi görüntü

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

Ve sonra onu aramaya çalışırsam

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

Aşağıdaki istisnayı alıyorum

HttpServerUtility.Execute, zaman uyumsuz bir işlemin tamamlanmasını beklerken engellendi.

Açıklama: Mevcut web isteğinin yürütülmesi sırasında işlenmeyen bir istisna oluştu. Hata ve kodda nereden kaynaklandığı hakkında daha fazla bilgi için lütfen yığın izlemeyi inceleyin.

Özel Durum Ayrıntıları: System.InvalidOperationException: HttpServerUtility.Execute, zaman uyumsuz bir işlemin tamamlanmasını beklerken engellendi.

Neden bu hatayı alıyorum? Çalışması gerekmez mi?

Yanıtlar:


97

Alt eylemler eşzamanlı olarak çağrılmalıdır. Sayı 601 Mevcut MVC kitaplıklarında bu işlevselliğe izin veren son güncellemelerden de haberdar değilim.

Sayı 601 ile ilgili bir yorum, bu işlevselliğin MVC vNext, aka. MVC6. ViewComponentAşağıdaki gibi bir görünümden eşzamansız olarak çağrılabilen alt eylemler ile değiştirilecek gibi görünüyor. Burada ve burada tam örnekler

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

MVC6 hakkında daha fazla bilgi için, http://www.asp.net/vnext/overview/aspnet-vnext/overview adresine bakın.

Not: Bu cevap sadece bir formalitedir, bu nedenle soru cevaplandı olarak işaretlenebilir


601 bağlantısı artık geçerli değil
Serge

6

Bu sorun için bir geçici çözüm, yöntemi MVC'nin gerektirdiği şekilde eşzamanlı hale getirmek, SynchronizationContext'i temizlemek, zaman uyumsuz yöntemi çağırmak ve sonucu beklemek, ardından bağlamı geri yüklemektir.

tam aswerımı burada gör


3
(Bu gönderi soruya kaliteli bir yanıt sağlamıyor gibi görünüyor . Lütfen cevabınızı düzenleyin veya soruya yorum olarak gönderin).
sɐunıɔ ןɐ qɐp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.