У меня есть сайт MVC 4.0, который использует пакет асинхронного/ожидающего BCL. Чтобы сохранить HttpContext по исходной нити и последующей нити (после ОЖИДАНИЯ) Я начал с созданием закрытия с ссылкой на контекст, как так:async ждет с .net 4.0 - поддерживать статический контекст
public async Task<ViewResult> GetCustomer(int id)
{
var ctx = HttpContext.Current;
ctx["test"] = "test";
await DoSomeLongRunningIO();
var test = ctx["test"];
//do other things with context
return View();
}
Однако, мне нужно позвонить различные услугам после AWAIT , Эти устаревшие службы напрямую ссылаются на HttpContext.Current. Итак, я подошел к этому со следующим кодом, который казался простым способом обеспечить, чтобы эти службы работали должным образом.
public async Task<ViewResult> GetCustomer(int id)
{
var ctx = HttpContext.Current;
await DoSomeLongRunningIO();
HttpContext.Current = ctx;
//call other services which use static references to httpcontext
return View();
}
Это работает, но я читал this answer that suggests it is a bad idea:
- это плохая идея, и если да, то почему это хуже, чем в первом примере?
Спасибо за ваше время.
благодарит за ваш ответ. когда мы говорим undefined, что это значит? (я прочитал ссылку, но не понял). К сожалению, я не могу использовать 4.5. Из моего кода выше, я не думал, что когда-либо буду в состоянии, когда у меня есть 2 потока с одним контекстом за один раз? Это всегда будет 1 поток и 1 контекст (в любой момент). – jonho
@jonho: «Undefined» является сокращением для «неопределенного поведения». Это означает, что он не будет работать правильно. –
Я решил использовать TPL вместо этого. – jonho