Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save brockallen/46a2a24550cc22aa2a1bb224001a63c2 to your computer and use it in GitHub Desktop.
Save brockallen/46a2a24550cc22aa2a1bb224001a63c2 to your computer and use it in GitHub Desktop.
deadlock fix for ws-fed/oidc katana middleware
namespace Common
{
public class AdapterConfigurationManager : IConfigurationManager<OpenIdConnectConfiguration>
{
private readonly IConfigurationManager<OpenIdConnectConfiguration> _inner;
public AdapterConfigurationManager(IConfigurationManager<OpenIdConnectConfiguration> inner)
{
_inner = inner;
}
public Task<OpenIdConnectConfiguration> GetConfigurationAsync(CancellationToken cancel)
{
var res = AsyncHelper.RunSync(() => _inner.GetConfigurationAsync(cancel));
return Task.FromResult(res);
}
public void RequestRefresh()
{
return;
}
}
}
namespace Common
{
public static class AsyncHelper
{
private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None,
TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default);
public static TResult RunSync<TResult>(Func<Task<TResult>> func)
{
var cultureUi = CultureInfo.CurrentUICulture;
var culture = CultureInfo.CurrentCulture;
return _myTaskFactory.StartNew(() =>
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = cultureUi;
return func();
}).Unwrap().GetAwaiter().GetResult();
}
public static void RunSync(Func<Task> func)
{
var cultureUi = CultureInfo.CurrentUICulture;
var culture = CultureInfo.CurrentCulture;
_myTaskFactory.StartNew(() =>
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = cultureUi;
return func();
}).Unwrap().GetAwaiter().GetResult();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment