状态码401上的HTTPCliend处理程序阻止其他任务

问题描述

这是我的处理程序中的代码:

   public class MoeZdravjeStatusCodeHandler : DelegatingHandler
    {
        public MoeZdravjeStatusCodeHandler(HttpMessageHandler innerHandler) : base(innerHandler) { }
        public IMojLekDataStore<Object> MojLekDataStore => DependencyService.Get<IMojLekDataStore<Object>>();
        public bool flag=true;
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
        {
           
            HttpResponseMessage response = new HttpResponseMessage();
            response = await base.SendAsync(request,cancellationToken);
            int status_code = (int)response.StatusCode;
            if (response.IsSuccessStatusCode)
            {
                return response;
            }
            else if(status_code == 401 && DependencyService.Get<ISharedFunctions>().GetUserValidation() == true )
            {
                try
                {
                    if (flag)
                    {
                        flag = false;
                        string date = DateTime.Today.ToString("yyyy-MM-dd") + "MoeZdravje";
                        string password = Helpers.ServiceHelper.HashPassword(date).ToString();
                        LoginMoeZdravje log = new LoginMoeZdravje();
                        log.EZBO = DependencyService.Get<ISharedFunctions>().GetPatient().Ezbo.ToString();
                        log.PASSWORD = password;
                        log.CONFIRMED_USER = 1;
                        var response_token = await MojLekDataStore.GetMoeZdravjeToken(log);
                        if (response_token != null && !String.IsNullOrEmpty(response_token.Token))
                        {
                            flag = true;
                            DependencyService.Get<ISharedFunctions>().SaveMoeZdravjeToken(response_token.Token);
                            await Application.Current.MainPage.DisplayAlert("","ВАШИОТ ТОКЕН Е ОСВЕЖЕН",AppResources.BTNOK);
                            Application.Current.MainPage = new NavigationPage(new MainMenu());
                        }
                        else
                        {
                            flag = true;
                            await Application.Current.MainPage.DisplayAlert("",AppResources.SERVER_ERROR,AppResources.BTNOK);
                        }
                    }
                    else
                    {
                      CancellationTokenSource source = new CancellationTokenSource();
                      cancellationToken = source.Token;
                      source.Cancel();
                      source.Dispose();
                    }
                }
                catch (AggregateException ae)
                {
                    foreach (Exception e in ae.InnerExceptions)
                    {
                        if (e is TaskCanceledException)
                            Console.WriteLine("Unable to compute mean: {0}",((TaskCanceledException)e).Message);
                        else
                            Console.WriteLine("Exception: " + e.GetType().Name);
                    }
                }
                finally
                {

                }
            }
            return response;
        }

我想何时await MojLekDataStore.GetToken(log);阻止每个异步任务,直到完成此请求,因为通过此请求,我从我的Api中获得了一个新令牌,并且需要保存该令牌并调用请求以使用新的获取数据令牌。我有一个带有4个异步任务的tabbedPage,该处理程序被调用了两次以获取新令牌,但是我需要一个并开始使用新令牌。

编辑 我添加了 CancellationTokenSource source = new CancellationTokenSource(); 但我不知道这是否可以停止其他3个异步任务?当第一个401status_code请求到来时使用该标志。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...