首页 > 解决方案 > 只有处于完成状态的任务才能被释放

问题描述

我正在从服务发送请求并显式调用注销 API 以释放资源,但我遇到了标题中的错误。我正在使用 Task.Run() 来防止死锁。

目前这是我的代码:

        var baseAddress = new Uri(baseServiceUrl);
        var cookieContainer = new CookieContainer();
        using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
        using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
        {
            client.Timeout = TimeSpan.FromSeconds(3600);
            client.DefaultRequestHeaders.Authorization = authentication;
            var requestUrl = GenerateServiceRequestUrl();
            using (var response = Task.Run(() => client.GetAsync(requestUrl)).GetAwaiter().GetResult())
            {
                //call logout explicity
                using (Task.Run(() => client.GetAsync(baseServiceUrl + LogoutUrl).GetAwaiter().GetResult())) { }

                return new MyServiceResponse(response, getContent);
            }
        }

错误来自这行代码显式调用注销:

using (Task.Run(() => client.GetAsync(_baseUrl + LogoutUrl).GetAwaiter().GetResult())) { }

但是,当我尝试将其更改为下面的代码时,错误消失了:

using (client.GetAsync(baseServiceUrl + LogoutUrl).Result) { }

我的问题是有没有办法使用 Task.Run() 进行注销调用?

标签: c#apihttpclientrest

解决方案


推荐阅读