我正在使用DelegatingHandler
拦截从一个服务到另一个服务的所有呼叫。我对DelegatingHandlers
完全不了解。
这就是问题所在。 我们目前有一个API来接受调用并测量并发调用,它有一些机制可以根据需要限制它。它就是这种形式。 (由于实际API对于调试很重,我实际上使用以下存根方法来测试它)
private Task<HttpResponseMessage> ExecuteAsync1(Func<Task<HttpResponseMessage>> action)
{
return ExecuteAsync2(action);
}
private async Task<HttpResponseMessage> ExecuteAsync2(Func<Task<HttpResponseMessage>> action)
{
return await action().ConfigureAwait(false);
}
现在在这个委托处理程序中,我必须像这样使用这个API。
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (this.ThrottlingFactory == null || !this.ThrottlingEnabled)
{
return await base.SendAsync(request, cancellationToken);
}
else
{
var response = await this.ExecuteAsync1(() =>
{
return base.SendAsync(request, cancellationToken);
});
// Analyse response for certain thing here.
return response;
}
}
我的问题是,在执行ExecuteAsync1(它实际上完成了ExecuteAsync2)后,代码永远不会返回。我尝试了很多变化,比如为链中的所有方法添加async / await,包括anon方法等。有人可以指点我在这里做错的事吗?
答案 0 :(得分:0)
这是我必须要做的。我不得不ConfigureAwait(false)
来电话。
var response = await this.ExecuteAsync1(() =>
{
return base.SendAsync(request, cancellationToken);
}).ConfigureAwait(false);