Microsoft Identity에는 비동기 메서드를 동 기적으로 호출하는 확장 메서드가 있습니다. 예를 들어 GenerateUserIdentityAsync () 메서드와 동일한 CreateIdentity ()가 있습니다
UserManagerExtensions.CreateIdentity ()를 보면 다음과 같습니다.
public static ClaimsIdentity CreateIdentity<TUser, TKey>(this UserManager<TUser, TKey> manager, TUser user,
string authenticationType)
where TKey : IEquatable<TKey>
where TUser : class, IUser<TKey>
{
if (manager == null)
{
throw new ArgumentNullException("manager");
}
return AsyncHelper.RunSync(() => manager.CreateIdentityAsync(user, authenticationType));
}
이제 AsyncHelper.RunSync의 기능을 살펴 보겠습니다.
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();
}
따라서 이것은 비동기 메소드의 래퍼입니다. 그리고 결과에서 데이터를 읽지 마십시오. ASP에서 코드를 잠재적으로 차단합니다.
나에게는 의심스러운 또 다른 방법이 있지만, 당신도 그것을 고려할 수 있습니다
Result r = null;
YourAsyncMethod()
.ContinueWith(t =>
{
r = t.Result;
})
.Wait();