我有以下代码来获取承载令牌,然后在c#应用程序中调用Web API。
public async Task<HttpResponseMessage> SendHttpRequest()
{
HttpResponseMessage response = null;
try
{
HttpClient client = new HttpClient();
string accessToken = await GetBearerToken(resourceUrl, clientId, clientSecret, tokenProviderUrl);
if (!string.IsNullOrEmpty(accessToken))
httpRequest.Headers.Add("Authorization", ("Bearer " + accessToken));
response = await client.SendAsync(httpRequest);
}
catch(Exception ex)
{
log.Error("Exception raised while sending HTTP request");
log.Error("Exception details : " + ex.Message);
}
return response;
}
public async Task<string> GetBearerToken()
{
HttpResponseMessage response = null;
HttpClient client = new HttpClient();
string token = "";
try
{
var request = new HttpRequestMessage(HttpMethod.Post, tokenProviderUrl);
request.Content = new FormUrlEncodedContent(new Dictionary<string, string> {
{ "client_id",clientId},
{ "client_secret", clientSecret },
{ "grant_type", "client_credentials" },
{ "resource", resource },
});
response = await client.SendAsync(request);
var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
token = payload.Value<string>("access_token");
}
catch (HttpRequestException ex)
{
log.Error("Error in GetToken : " + ex.Message.ToString());
}
return token;
}
我在这里面临的问题是,有时,此代码有时会抛出异常,提示“任务已取消”,而并非每次都如此。我在网上搜索并遇到了this答案。因此,我检查了任务是否已取消。然后,如该答案所述,我将超时时间增加到30分钟。
现在奇怪的是,任务等待30分钟(或我们指定的任何超时),然后引发Task被取消的异常。这使我发疯。
我想知道为什么当我们不明确要求任务时为什么取消任务,以及取消任务的人或来源?有什么办法可以找到取消请求的来源吗?
在这方面的任何帮助都将受到高度赞赏,因为我无法找出问题所在。
尽管此处未提及,但请假定所有变量的值都正确。
编辑
异常消息:
任务被取消。
这是“异常堆栈跟踪”:
Exception StackTrace:位于 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Net.Http.HttpClient.d__58.MoveNext() ---从上一个引发异常的位置开始的堆栈跟踪- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务),位于System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在SampleProject.d__2.MoveNext()中 C:\ Users \ SampleProject \ HttpHelper.cs:第145行 ---从上一个引发异常的位置开始的堆栈跟踪---