我正在使用 HttpClient 从 xamarin.forms 共享项目调用休息服务。对于第一次调用它抛出“任务被取消”,当我第二次调用它时,它工作正常。 如果我第一次在设备上安装该应用程序并调用该服务,它会抛出错误,但之后不会重复。
安装到设备后,我可以调试、运行多次但没有问题,但是当我卸载然后调试/运行或在新设备上时,这个问题就出现了,而且只有一次。
下面是我的代码。
我试图查看该任务是否被其他任务或其他进程取消,并添加了尝试通过 TaskCanceledException 进行捕获但未被捕获的情况。
public static class HttpManager<T, R>
{
private static HttpClient client = new HttpClient();
private static readonly string baseUrl = "http://webapi.testwesite.org/api/";
private static void Initialize()
{
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = new TimeSpan(0, 20, 0);
}
public static async Task<T> PostAsync(R input, string url)
{
try
{
Initialize();
return await PostMessag(input, url);
}
catch (TaskCanceledException ex)
{
throw new Exception("Unable to contact server. Please try again");
}
catch (Exception ex)
{
throw new Exception("Unable to contact server. Please try again");
}
}
private static async Task<T> PostMessag(R input, string url)
{
HttpResponseMessage response = await client.PostAsJsonAsync(url, input);
T retunVal = await response.Content.ReadAsAsync<T>();
return retunVal;
}
}
下面是堆栈跟踪
at System.Net.Http.NSUrlSessionHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
[0x001d4] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.14.0.114/src/Xamarin.iOS/Foundation/NSUrlSessionHandler.cs:541
at System.Net.Http.HttpClient.SendAsyncWorker (System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpCompletionOption completionOption, System.Threading.CancellationToken cancellationToken) [0x0009e]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.14.0.114/src/Xamarin.iOS/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs:281
at TestApp.iOS.HttpManager`2[T,R].PostMessag (R input, System.String url) [0x0007c] in <a6b47dd5314e460faeb66d5af59e3f81>:0
at TestApp.iOS.HttpManager`2[T,R].PostAsync (R input, System.String url) [0x00050] in <a6b47dd5314e460faeb66d5af59e3f81>:0
2019-08-17 09:34:12.789 TestApp.iOS[12806:43127157] Canceled
Thread finished: <Thread Pool> #10
The thread 0xa has exited with code 0 (0x0).
最佳答案
我认为这是一个超时问题。这可以通过增加超时值来解决。
关于xamarin - 第一次调用 httpclient 时任务被取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532981/