C# async tasks waiting indefinitely
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 await
ing 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.
+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.