C# 配置等待的替代方案
我有一些C#代码,实际上我正在移植到VB.Net。现在我注意到到处都使用configurewait(false)。要求代码依赖于.Net 4.0 你可能知道。。。ConfigureAwait(false)出现在.Net 4.5中。如何将以下代码转换为与.Net 4.0兼容 是否有一个通用的解决方案,因为ConfigureAwait在代码中无处不在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
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 4async/await
和HttpClient
从.NET 4.5开始就受支持,因此您需要完全重写该部分。显然,我必须包括Microsoft.BCL.async:)@Eminem-async/await(和HttpClient
)在NET40上与Microsoft.BCL.async配合使用,但请注意,目标计算机必须安装才能使用它。如果他们定期更新,他们应该有它,但我以前发现过。