<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet" -->

---
title: Using the ASP.NET MVC Futures AsyncController | daily.dev
description: A walkthrough of the experimental AsyncController class from the ASP.NET MVC Futures assembly, explaining why asynchronous action methods help ASP.NET scale...
canonical: https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Using the ASP.NET MVC Futures AsyncController | daily.dev
og:description: A walkthrough of the experimental AsyncController class from the ASP.NET MVC Futures assembly, explaining why asynchronous action methods help ASP.NET scale...
og:url: https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet
og:image: https://api.daily.dev/og/posts/egKGbWlET.png
og:image:alt: Using the ASP.NET MVC Futures AsyncController
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Using the ASP.NET MVC Futures AsyncController

**[Maarten Balliauw](https://daily.dev/sources/maartenballiauw)** · 7 min read · 0 upvotes · 0 comments

## Summary

A walkthrough of the experimental AsyncController class from the ASP.NET MVC Futures assembly, explaining why asynchronous action methods help ASP.NET scale under long-running I/O operations. Covers how to prepare a project to use it (replacing MapRoute with MapAsyncRoute and swapping the HTTP handler in Web.config), then demonstrates the three supported async patterns: IAsyncResult, the event pattern (via AsyncManager), and the delegate pattern. The author favors the event pattern for readability and recommends the feature be adopted into a future official ASP.NET MVC release.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.maartenballiauw.be/posts/2009-04-08-using-the-aspnet-mvc-futures-asynccontroller>

## Questions this post answers

### How do I set up an ASP.NET MVC project to use the AsyncController from the MVC Futures assembly?

Download Microsoft.Web.Mvc.dll from the ASP.NET Futures release on CodePlex, then change route registrations in Global.asax.cs from MapRoute to MapAsyncRoute (which falls back to MapRoute automatically for synchronous controllers). Next, update Web.config to replace the MvcHttpHandler type with Microsoft.Web.Mvc.MvcHttpAsyncHandler, and have controllers inherit from AsyncController instead of Controller.

_daily.dev surfaces practical setup walkthroughs like this for developers wiring up legacy ASP.NET MVC async support._

### What are the three asynchronous action method patterns supported by ASP.NET MVC's AsyncController?

AsyncController supports the IAsyncResult pattern (paired BeginX/EndX methods following the standard .NET async pattern), the event pattern (an action method that increments/decrements AsyncManager.OutstandingOperations and a matching Completed method), and the delegate pattern (a single method using AsyncManager.RegisterTask with callback and result delegates). All three can be mixed within the same controller.

_Developers weighing async controller patterns can find comparisons like this through daily.dev._

### Why does ASP.NET's limited thread pool matter for long-running requests?

ASP.NET services incoming requests using a default thread pool of around 25 threads (varying by CPU count and configuration), so a request that takes a full minute to process ties up one thread for that entire duration. Since the thread mostly sits idle waiting on resources like databases or web services, only a small number of simultaneous long-running requests can be handled before the server runs out of available threads.

_daily.dev helps developers troubleshooting thread exhaustion keep up with async request-handling techniques._

## Similar posts on daily.dev

- [ASP.NET Core Controllers: A Practical Guide to Building REST Endpoints](https://daily.dev/posts/asp-net-core-controllers-a-practical-guide-to-building-rest-endpoints-qbrdx5rqi) · We Are .NET · 0 upvotes · 0 comments
- [Async or Swim: The Complete Guide to Asynchronous .NET](https://daily.dev/posts/async-or-swim-the-complete-guide-to-asynchronous-net-n2fszfnf6) · ITNEXT · 9 upvotes · 1 comments
- [Rails to ASP.NET Core: A Developer's Map](https://daily.dev/posts/rails-to-asp-net-core-a-developer-s-map-bwpvb7n8j) · Khalid Abuhakmeh · 0 upvotes · 0 comments
- [How to Migrate from ASP.NET Framework to ASP.NET Core](https://daily.dev/posts/how-to-migrate-from-asp-net-framework-to-asp-net-core-e22ntd3va) · freeCodeCamp · 4 upvotes · 0 comments
- [How to Upgrade ASP.NET MVC to .NET Step by Step](https://daily.dev/posts/how-to-upgrade-asp-net-mvc-to-net-step-by-step-i3p1uesfs) · C\# Corner · 2 upvotes · 0 comments

---

Tags: [#.net](https://daily.dev/tags/.net), [#c#](https://daily.dev/tags/c#)

[View this post on daily.dev](https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Using the ASP.NET MVC Futures AsyncController","url":"https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet"},"datePublished":"2026-10-04T13:06:10.147Z","dateModified":"2026-10-04T13:14:11.949Z","description":"A walkthrough of the experimental AsyncController class from the ASP.NET MVC Futures assembly, explaining why asynchronous action methods help ASP.NET scale...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ef9f881806dc8da917f2500b60e8112c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ef9f881806dc8da917f2500b60e8112c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Maarten Balliauw","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Maarten Balliauw","logo":"https://media.daily.dev/image/upload/s--rOTg3VYO--/f_auto,q_auto/v1791119043/logos/maartenballiauw?_a=BAMAMicg0","url":"https://daily.dev/sources/maartenballiauw"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":".net,c#","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Maarten Balliauw","item":"https://daily.dev/sources/maartenballiauw"},{"@type":"ListItem","position":3,"name":"Using the ASP.NET MVC Futures AsyncController"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/using-the-asp-net-mvc-futures-asynccontroller-egkgbwlet#faq","mainEntity":[{"@type":"Question","name":"How do I set up an ASP.NET MVC project to use the AsyncController from the MVC Futures assembly?","acceptedAnswer":{"@type":"Answer","text":"Download Microsoft.Web.Mvc.dll from the ASP.NET Futures release on CodePlex, then change route registrations in Global.asax.cs from MapRoute to MapAsyncRoute (which falls back to MapRoute automatically for synchronous controllers). Next, update Web.config to replace the MvcHttpHandler type with Microsoft.Web.Mvc.MvcHttpAsyncHandler, and have controllers inherit from AsyncController instead of Controller. daily.dev surfaces practical setup walkthroughs like this for developers wiring up legacy ASP.NET MVC async support."}},{"@type":"Question","name":"What are the three asynchronous action method patterns supported by ASP.NET MVC's AsyncController?","acceptedAnswer":{"@type":"Answer","text":"AsyncController supports the IAsyncResult pattern (paired BeginX/EndX methods following the standard .NET async pattern), the event pattern (an action method that increments/decrements AsyncManager.OutstandingOperations and a matching Completed method), and the delegate pattern (a single method using AsyncManager.RegisterTask with callback and result delegates). All three can be mixed within the same controller. Developers weighing async controller patterns can find comparisons like this through daily.dev."}},{"@type":"Question","name":"Why does ASP.NET's limited thread pool matter for long-running requests?","acceptedAnswer":{"@type":"Answer","text":"ASP.NET services incoming requests using a default thread pool of around 25 threads (varying by CPU count and configuration), so a request that takes a full minute to process ties up one thread for that entire duration. Since the thread mostly sits idle waiting on resources like databases or web services, only a small number of simultaneous long-running requests can be handled before the server runs out of available threads. daily.dev helps developers troubleshooting thread exhaustion keep up with async request-handling techniques."}}]}
```

