Skip to content

Instantly share code, notes, and snippets.

@nzbart
Last active October 22, 2015 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nzbart/16a608fb45c9ed707e04 to your computer and use it in GitHub Desktop.
Save nzbart/16a608fb45c9ed707e04 to your computer and use it in GitHub Desktop.
Create an instance of the AspNetSynchronizationContext, which is internal and is not easily constructed.
static SynchronizationContext CreateAspNetSynchronizationContext()
{
const string taskFriendlyConfigName = "aspnet:UseTaskFriendlySynchronizationContext";
var originalConfigSetting = ConfigurationManager.AppSettings[taskFriendlyConfigName];
ConfigurationManager.AppSettings[taskFriendlyConfigName] = "true";
try
{
TextWriter writer = new StringWriter();
HttpRequest rx = new HttpRequest("", "http://example.com", "");
HttpResponse tx = new HttpResponse(writer);
HttpContext ctx = new HttpContext(rx, tx);
ctx.AllowAsyncDuringSyncStages = true;
return (SynchronizationContext)ctx.GetType().GetProperty("SyncContext", BindingFlags.Instance | BindingFlags.NonPublic).GetGetMethod(true).Invoke(ctx, null);
}
finally
{
ConfigurationManager.AppSettings[taskFriendlyConfigName] = originalConfigSetting;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment