我的代码在这里有什么问题吗?我一直收到这个错误:
System.InvalidOperationException:请求消息已发送。无法多次发送相同的请求消息。
我的HttpRequestMessage在Func中,所以每当我传入func()时我都会得到一个全新的请求。
public async Task<HttpResponseMessage> GetAsync(HttpRequestMessage request)
{
return await RequestAsync(() => request);
}
public async Task<HttpResponseMessage> RequestAsync(Func<HttpRequestMessage> func)
{
var response = await ProcessRequestAsync(func);
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
WaitForSomeTime();
response = await ProcessRequestAsync(func);
}
return response;
}
private async Task<HttpResponseMessage> ProcessRequestAsync(Func<HttpRequestMessage> func)
{
var client = new HttpClient();
var response = await client.SendAsync(func()).ConfigureAwait(false);
return response;
}
答案 0 :(得分:10)
您正在调用两次相同的func
参数:
var response = await ProcessRequestAsync(func);
//...
response = await ProcessRequestAsync(func);
在这种情况下,func
每次都会返回相同的请求。每次调用它时都不会生成新的。如果您每次真正需要不同的请求,那么func
每次调用都需要返回一条新消息:
var response = await GetAsync(() => new HttpRequestMessage()); // Create a real request.
public async Task<HttpResponseMessage> GetAsync(Func<HttpRequestMessage> requestGenerator)
{
return await RequestAsync(() => requestGenerator());
}
答案 1 :(得分:0)
我遇到了同样的问题,但我的代码中没有重复。原来我在异步过程中添加了一个手表。当我逐步执行代码时,该手表会调用该过程,因此当我到达该行时,我试图调试它并因此错误消息而崩溃。 移除所有手表解决了问题。 把这个留在这里给可能有同样问题的其他人。