次のコードは、対応する URL にアクセスするときに例外をスローします。のオブジェクトは のオブジェクトと同じstate
ではありません。なぜこうなった?の側で有効なオブジェクトを取得するにはどうすればよいですか?StartNew()
ctx
ProcessRequest
HttpContextBase
StartNew()
using System.Web;
using System.Web.Routing;
namespace AsyncUseHttpContextBaseWillFail
{
public class FooHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var ctx = new HttpContextWrapper(context);
System.Threading.Tasks.Task.Factory.StartNew(state =>
{
//ArgumentException: Value does not fall within the expected range.
var ip = ((HttpContextBase)state).Request.UserHostAddress;
}, ctx);
}
public bool IsReusable
{
get { return false; }
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route(string.Empty, new FooRoute()));
}
}
public class FooRoute : IRouteHandler
{
public virtual IHttpHandler GetHttpHandler(RequestContext context)
{
return new FooHandler();
}
}
}