Мы пытаемся использовать базовый AsyncLocal для хранения «AsyncFlowId» для простого отслеживания запросов. Я знаю, я знаю: статические классы — это плохо, внедрение зависимостей — это хорошо. Несмотря на это, мы стремимся сделать это именно так. Что мне не ясно, так это то, является ли это потокобезопасным без блокировки или нет. Магия AsyncLocal усложняет размышления.
У нас есть такой код:
Код: Выделить всё
public static class RuntimeContext
{
private static AsyncLocal _asyncFlowId = new AsyncLocal();
public static Guid AsyncFlowId => _asyncFlowId ??= Guid.NewGuid(); //This doesn't seem thread-safe, but I'm not certain given the AsyncLocal.
}
Кажется, это хорошее место для использования Lazy, но я не вижу подходящего способа разместить его здесь. Возможно, я упускаю что-то очевидное.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... syncflowid