我可以使用具有天蓝色功能的AsyncLocal吗?

时间:2018-06-01 12:40:54

标签: c# azure azure-functions

我正在使用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。我担心并发会发生什么?如果新请求被触发,此方法的上下文是否会更改?

1 个答案:

答案 0 :(得分:0)

它应该工作。 consol.log将负责保留并发调用之间的上下文。我做了一个快速测试,它能够按预期保留请求。

函数通常很小而且简单,所以我默认使用更简单的方法来传递上下文,通常只是传递参数。但如果AsyncLocal与您的案件相关,请试一试。