Могу ли я использовать AsyncLocal с функцией Azure? - PullRequest
0 голосов
/ 01 июня 2018

Я использую функцию Azure, и мне нужно передать HttpRequestMessage по всей цепочке вызываемых асинхронных / ожидающих функций.Могу ли я вместо этого использовать 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();
    }
}

В приведенном выше коде я хочу получить доступ к httpContext внутри Dispatch ().Я беспокоюсь о том, что произойдет с параллелизмом?Изменится ли контекст для этого метода в случае запуска нового запроса?

1 Ответ

0 голосов
/ 02 июня 2018

должно работать.AsyncLocal позаботится о сохранении контекста между одновременными вызовами.Я провел быстрый тест, и он смог сохранить запрос, как и ожидалось.

Функции, как правило, небольшие и простые, поэтому я бы по умолчанию использовал более простые способы передачи контекста, обычно просто передавая параметры.Но если AsyncLocal имеет отношение к вашему делу, попробуйте.

...