xamarin - 第一次调用 httpclient 时任务被取消

标签 xamarin xamarin.forms xamarin.ios

我正在使用 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/

相关文章:

c# - 使用源代码调试 Xamarin Forms 应用程序

.net - Objective-C to Monotouch (.NET) 单行代码转换

ios - 使用 MonoTouch 部署到 App Store

azure - 在 Xamarin.Forms 中使用 MSAL 获取 Azure B2C SignUpSignIn 应用程序声明

xamarin.ios - 使用 Xamarin 移植 Windows Phone 游戏

c# - Xamarin 中的跨平台 OpenGL 渲染

c# - 如何在 iOS 应用程序的 Xamarin 表单中更改全局色调颜色?

c# - 仅当应用程序处于前台 ios 时才接收 Firebase 推送通知

android - 客户端处理程序无法识别我受信任的 API 证书

ios - UIPickerView 在外部点击时滚动到最后