C# async tasks waiting indefinitely

后端 未结 2 897
醉梦人生
醉梦人生 2021-02-20 01:48

I am trying to use the functionality provided by \"async\" & \"await\" to asynchronously download webpage content and I have into issues where the Tasks are waiting forever

相关标签:
2条回答
  • 2021-02-20 02:17

    First, make sure you're running on .NET 4.5, not .NET 4.0. ASP.NET was made async-aware in .NET 4.5.

    Then, the proper solution is to await the result of Task.WhenAll:

    var tasks = websites.Select(GenerateSomeContent);
    await Task.WhenAll(tasks);
    

    The ASP.NET pipeline (in .NET 4.5 only) will detect that your code is awaiting and will stall that request until Page_Load runs to completion.

    Synchronously blocking on a task using Wait in this situation causes a deadlock as I explain on my blog.

    0 讨论(0)
  • 2021-02-20 02:24

    +1 Stephen Cleary. Just came to know you need to have async before void type with Page_Load as given below:

    protected async void Page_Load(object sender, EventArgs e)
    {
       var tasks = websites.Select(GenerateSomeContent);
       await Task.WhenAll(tasks);
    }
    

    And then in your code-behind file (in case asp.net web form app) should also have Async="true" attribute.

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Async="true" Inherits="EmptyWebForm._default" %>
    

    Hope this helps visitors.

    0 讨论(0)
提交回复
热议问题