Я пытаюсь подключиться к Azure AD, и я использую этот код.Await kills process
try
{
var clientCredential = new ClientCredential(_clientId, _clientSecret);
var authContext = new AuthenticationContext(AuthUri + _tenant);
var authResult = await authContext.AcquireTokenAsync(GraphUri,clientCredential);
var authString = authResult.CreateAuthorizationHeader();
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = _requestUri,
};
request.Headers.Add("Authorization", authString);
HttpResponseMessage response = null;
await client.SendAsync(request).ContinueWith(taskWithMessage =>
{
response = taskWithMessage.Result;
});
return await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Большая проблема, которую я не понимаю, что, когда исполнение достигает первого ОЖИДАНИЕ (var authResult = await authContext.AcquireTokenAsync(GraphUri,clientCredential);
) процесс просто убит. Никакое исключение не выбрасывается, ничего.
Если я заменить эту строку с
var authResult = authContext.AcquireTokenAsync(GraphUri,clientCredential);
var authString = authResult.Result.CreateAuthorizationHeader();
выполнение продолжается до await client.SendAsync(request).ContinueWith(taskWithMessage...
, где процесс убит снова без каких-либо исключений быть брошенными или любым сообщением предупреждения или что-то.
Даже странная вещь заключается в том, что этот код работает очень хорошо в другом проекте, но здесь он просто не работает.
Edit:
static void ImportLicence()
{
InsertToDb();
}
public async void InsertoDb()
{
var x = await GetSP();
}
public async Task<Dictionary<ServicePlanViewModel, List<ServicePlanViewModel>>> GetSP()
{
var sp = await MakeRq();
}
public async Task<string> MakeRequest()
{
var authString = await GetAuth();
..........
return await response.Content.ReadAsStringAsync();
}
private async Task<string> GetAuth()
{
.....
var authResult = await authContext.AcquireTokenAsync(GraphUri, clientCredential);
return authResult.CreateAuthorizationHeader();
}
Могли бы вы игнорировать '.ContinueWith' и просто использовать' 'async' await', не пытаются объединить обоих и посмотреть, если проблема повторяется. –
@AkashKava такой же бывает бывает. Процесс убит. – viktorfilim
@viktorfilim, вы смешиваете синхронизацию и асинхронные реализации. Покажите метод, в который этот код инкапсулирован. – Nkosi