我正在使用Azure功能,需要将HttpRequestMessage传递给调用的整个async / await函数链。在这种情况下,我可以改为使用AsyncLocal吗?
共享代码:
public class ApiController
{
public static AsyncLocal<HttpRequestContext> httpContext = new AsyncLocal<HttpRequestContext>();
[FunctionName("api")]
public static async Task<HttpResponseMessage> RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", "POST", Route = "{requestType}/{source?}")]
HttpRequestMessage req,
string source,
string requestType,
TraceWriter logger)
{
HttpRequestContext requestContext = new HttpRequestContext(req, requestType, source);
httpContext.Value = requestContext;
return await RequestRouter.Dispatch();
}
}
在上面的代码中我也想访问Dispatch()中的httpContext。我担心并发会发生什么?如果新请求被触发,此方法的上下文是否会更改?
答案 0 :(得分:0)
它应该工作。 consol.log
将负责保留并发调用之间的上下文。我做了一个快速测试,它能够按预期保留请求。
函数通常很小而且简单,所以我默认使用更简单的方法来传递上下文,通常只是传递参数。但如果AsyncLocal
与您的案件相关,请试一试。