C# 配置等待的替代方案

C# 配置等待的替代方案,c#,async-await,task-parallel-library,configureawait,C#,Async Await,Task Parallel Library,Configureawait,我有一些C#代码,实际上我正在移植到VB.Net。现在我注意到到处都使用configurewait(false)。要求代码依赖于.Net 4.0 你可能知道。。。ConfigureAwait(false)出现在.Net 4.5中。如何将以下代码转换为与.Net 4.0兼容 是否有一个通用的解决方案,因为ConfigureAwait在代码中无处不在 public async Task<ListResponse> GetResponseAsync(ListRequest request

我有一些C#代码,实际上我正在移植到VB.Net。现在我注意到到处都使用configurewait(false)。要求代码依赖于.Net 4.0

你可能知道。。。ConfigureAwait(false)出现在.Net 4.5中。如何将以下代码转换为与.Net 4.0兼容

是否有一个通用的解决方案,因为ConfigureAwait在代码中无处不在

 public async Task<ListResponse> GetResponseAsync(ListRequest request = null)
        {
            request =  request ?? new ListRequest
            {
                Limit = _limit
            };

            using (var client = CreateMailClient("lists"))
            {
                var response = await client.GetAsync(request.ToQueryString()).ConfigureAwait(false);
                await response.EnsureSuccessMailChimpAsync().ConfigureAwait(false);

                var listResponse = await response.Content.ReadAsAsync<ListResponse>().ConfigureAwait(false);
                return listResponse;
            }
        }
公共异步任务GetResponseAsync(ListRequest请求=null) { 请求=请求??新列表请求 { 极限=\u极限 }; 使用(var client=CreateMailClient(“列表”)) { var response=await client.GetAsync(request.ToQueryString()).ConfigureAwait(false); wait response.EnsureSuccessMailChimpAsync().ConfigureWait(false); var listResponse=await response.Content.ReadAsAsync().ConfigureAwait(false); 返回列表响应; } } 回答:
请参考Microsoft.BCL.Async

这是您要精确查找的内容

如果您使用的是ConfigureAwait(),您可能真的很关心它,并希望它能够真正工作。不幸的是,因为异步方法实际上可能是同步完成的,所以对ConfigureWait()的调用可能不会影响任何事情。这意味着您也必须将它放在下一个异步调用上,以此类推,直到它出现在库中的每个方法上

参考Microsoft开发人员


代码似乎到处都是
configurewait
。这似乎太过分了。您知道这是一般情况下(针对不明智的编码指南)还是所有情况下都确实需要
ConfigureAwait
?如果没有,您首先必须确定哪些情况下它们是真正必要的。当我编写异步代码时,我几乎从不需要它。ConfigureAwait(false)是自.Net 4.5中引入异步/await以来最不协调的部分,因此您需要使用任务延续,而不是Darjan所说的,该代码不能按原样移植到.Net 4
async/await
HttpClient
从.NET 4.5开始就受支持,因此您需要完全重写该部分。显然,我必须包括Microsoft.BCL.async:)@Eminem-async/await(和
HttpClient
)在NET40上与Microsoft.BCL.async配合使用,但请注意,目标计算机必须安装才能使用它。如果他们定期更新,他们应该有它,但我以前发现过。