2016-12-20 5 views
2

Я получал HttpContext.Current как null внутри метода, который вызывается внутри фабрики задач. Поэтому я присвоил HttpContext.Current переменной currentContext. Затем я использовал одну и ту же переменную для назначения HttpContext.Current.Правильно ли назначать HttpContext.Current внутри фабрики задач?

var currentContext = HttpContext.Current; 
    Task shipmentCreationCompleted = Task.Factory.StartNew(() => 
    { 
     HttpContext.Current = currentContext; 
     MethodToPerformSomeAction(); 
    }); 

В настоящее время он работает нормально, без проблем. Пожалуйста, дайте мне знать, если у моего кода есть какие-либо проблемы технически. Или есть альтернативный способ справиться с этой проблемой?

+2

Передайте HttpContext на фабрику задач в качестве параметра, тогда вы всегда будете использовать тот же HttpContext, что и вызывающий метод. – alikuli

+0

Спасибо alikuli. Какая разница, если я использую это? –

+1

Вы будете использовать ту же ссылку на запрос, который использует вызывающая задача. Нет несовместимости. В основном это инжекция параметров. Поскольку ваш метод работает, возможно, этот метод тоже хорош, но так много всего происходит в многопользовательских средах, что я увереннее передать ссылку на HttpContext и использовать его. таким образом я всегда ЗНАЮ животное, с которым я имею дело. – alikuli

ответ

1

Наконец я использовал, как это основано на комментарий,

Task shipmentCreationCompleted = Task.Factory.StartNew(currentContext => 
    { 
     HttpContext.Current = (HttpContext)currentContext; 
     MethodToPerformSomeAction(); 
    }, HttpContext.Current); 

Он отлично работает!

Смежные вопросы