0

我有以下代码来获取不记名令牌,然后在 ac# 应用程序中调用 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;
}

我在这里面临的问题是,有时,这段代码偶尔会抛出一个异常,说“任务被取消”,而不是每次。我在网上搜索并找到了这个答案。所以我检查了任务是否被取消。然后我将超时时间增加到 30 分钟,如该答案中所述。

现在奇怪的是,任务等待 30 分钟(或我们指定的任何超时)然后抛出任务被取消异常。这让我发疯。

我想知道为什么当我们没有明确要求任务时任务会被取消,以及任务被取消的人或从哪里取消?有没有办法找到取消请求的来源?

非常感谢这方面的任何帮助,因为我无法弄清楚这个问题。

请假设所有变量都有正确的值,尽管这里没有提到。

编辑

异常消息:

一个任务被取消了。

这是异常堆栈跟踪:

异常 StackTrace:在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Net.Http.HttpClient.d__58.MoveNext() 的 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 结束来自先前引发异常的位置的堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter`1 的 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) C:\Users\SampleProject\HttpHelper.cs:line 145 中 SampleProject.d__2.MoveNext() 处的 .GetResult() --- 从先前引发异常的位置结束堆栈跟踪 ---

4

0 回答 0