タイムアウトを増やしましたが、TaskCanceledException
を取得しています。驚くべきことに、常に発生することさえありません。例外はいつか発生するだけで、エラーを再現するパターンを見つけることができません。私はネットワークコールを行うために使用している例外トレースとコードを追加しました。HttpClient c# - SendASyncでタスクがキャンセルされました
public static void getResponseFromUrlAsync<T>(T payload, string url,
Action<string> onSuccess, Action<string> onFailure)
{
string contentType = "application/json";
httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(30);
HttpRequestMessage requestMsg = new HttpRequestMessage();
requestMsg.RequestUri = new Uri(NetworkCallUrls.baseUri + url);
Utils.debugLog("Url", NetworkCallUrls.baseUri + url);
// try
//{
string auth = "Bearer " + Objects.GlobalVars.GetValue<string>("access_token"); // //"x1VwaR1otS66ZCTlgtv3X9aaSNpDOn"; //
httpClient.DefaultRequestHeaders.Add("Authorization", auth);
requestMsg.Method = HttpMethod.Post;
requestMsg.Content = new StringContent(
Utils.stringifyData(payload),
Encoding.UTF8,
contentType);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
makeNetworkCallCheckResponseStatusAndExecuteCorrospondingAction(requestMsg, onSuccess, onFailure, progressBarStatus);
}
internal static void disposeConnection(HttpClient httpClient)
{
httpClient.Dispose();
httpClient = null;
}
private static async void makeNetworkCallCheckResponseStatusAndExecuteCorrospondingAction(
HttpRequestMessage requestMsg, Action<string> onSuccess,
Action<string> onFailure, Action<bool> progressBarStatus)
{
Utils.debugLog("IN MAKE NETWORK CALL 1");
HttpResponseMessage response = await httpClient.SendAsync(requestMsg);
Utils.debugLog("IN MAKE NETWORK CALL 2");
ResponseStatus responseStatus = checkResponseStatusAndExecuteActionAccordinglyAsync(response);
Utils.debugLog("IN MAKE NETWORK CALL 3");
if (responseStatus.isSuccess)
{
Utils.debugLog("IN MAKE NETWORK CALL 4");
string responseString = await response.Content.ReadAsStringAsync();
Utils.debugLog("IN MAKE NETWORK CALL 5");
onSuccess(responseString);
Utils.debugLog("IN MAKE NETWORK CALL 6");
}
else
{
Utils.debugLog("IN MAKE NETWORK CALL 7");
onFailure(responseStatus.failureResponse);
Utils.debugLog("IN MAKE NETWORK CALL 8");
}
Utils.debugLog("IN MAKE NETWORK CALL 9");
disposeConnection(httpClient);
Utils.debugLog("IN MAKE NETWORK CALL 10");
}
私はHttpResponseMessage response = await httpClient.SendAsync(requestMsg);
ラインでTaskCanceledExceptionを取得しています、API呼び出しを行うために上記のコードを使用しています。
私はこの問題を解決するのに役立つかもしれません。私はインターネットで検索し、タイムアウトを増やすだけでなく使用します。私はあなたの問題を解決するのに役立つことを願っています
私には問題があると思います.APIのcall_1が完了する前に、httpClientが新しいもので更新されていますので、前回の呼び出しが返される前に、何度も何度も複数の呼び出しを行うので、別の呼び出しをしています。 – djkp
しかし、最高のプラクティスに従って、コードを更新します:) – djkp
それはあなたがメソッドを待つ必要がある理由です。 – mm8