Skip to content

Commit 43ba8d7

Browse files
paulomorgadoqxx
andauthored
Avoid closure by adding the HttpApllication to TaskAsyncHelpr.BeginTask. (#50)
Co-authored-by: Xi Qian <[email protected]>
1 parent 259c059 commit 43ba8d7

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

src/SessionStateModule/SessionStateModuleAsync.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,7 @@ private void InitModuleFromConfig(HttpApplication app, SessionStateSection confi
282282

283283
private IAsyncResult BeginAcquireState(object source, EventArgs e, AsyncCallback cb, object extraData)
284284
{
285-
HttpContext rqContext = ((HttpApplication)source).Context;
286-
return TaskAsyncHelper.BeginTask(() => AcquireStateAsync(rqContext), cb, extraData);
285+
return TaskAsyncHelper.BeginTask((HttpApplication)source, app => AcquireStateAsync(app), cb, extraData);
287286
}
288287

289288
private void EndAcquireState(IAsyncResult result)
@@ -293,8 +292,7 @@ private void EndAcquireState(IAsyncResult result)
293292

294293
private IAsyncResult BeginOnEndRequest(object source, EventArgs e, AsyncCallback cb, object extraData)
295294
{
296-
var app = (HttpApplication)source;
297-
return TaskAsyncHelper.BeginTask(() => OnEndRequestAsync(app), cb, extraData);
295+
return TaskAsyncHelper.BeginTask((HttpApplication)source, app => OnEndRequestAsync(app), cb, extraData);
298296
}
299297

300298
private void EndOnEndRequest(IAsyncResult result)
@@ -304,8 +302,7 @@ private void EndOnEndRequest(IAsyncResult result)
304302

305303
private IAsyncResult BeginOnReleaseState(object source, EventArgs e, AsyncCallback cb, object extraData)
306304
{
307-
var app = (HttpApplication)source;
308-
return TaskAsyncHelper.BeginTask(() => ReleaseStateAsync(app), cb, extraData);
305+
return TaskAsyncHelper.BeginTask((HttpApplication)source, app => ReleaseStateAsync(app), cb, extraData);
309306
}
310307

311308
private void EndOnReleaseState(IAsyncResult result)
@@ -380,8 +377,9 @@ private void OnStart(EventArgs e)
380377
RaiseOnStart(e);
381378
}
382379

383-
private async Task AcquireStateAsync(HttpContext context)
380+
private async Task AcquireStateAsync(HttpApplication app)
384381
{
382+
HttpContext context = app.Context;
385383
_acquireCalled = true;
386384
_releaseCalled = false;
387385
ResetPerRequestFields();

src/SessionStateModule/TaskAsyncHelper.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ namespace Microsoft.AspNet.SessionState
66
using System;
77
using System.Threading;
88
using System.Threading.Tasks;
9+
using System.Web;
910

1011
static class TaskAsyncHelper
1112
{
1213
private static readonly Task CompletedTask = Task.FromResult<object>(null);
1314

14-
public static IAsyncResult BeginTask(Func<Task> taskFunc, AsyncCallback callback, object state)
15+
public static IAsyncResult BeginTask(HttpApplication app, Func<HttpApplication, Task> taskFunc, AsyncCallback callback, object state)
1516
{
16-
Task task = taskFunc();
17+
Task task = taskFunc(app);
1718
if (task == null)
1819
{
1920
// Something went wrong - let our caller handle it.

0 commit comments

Comments
 (0)