2
我正在使用TPL在我的代码中创建新任务。所有这些都可以提高性能。但是每当有像Context.currentuser.iDentifier这样的HTTPContext对象。这段代码会抛出一个异常说HTTP对象对象不可用。空引用异常。 我想知道如何将上下文对象传递给任务对象?为什么httpcontext对象在使用任务并行库任务时不可用?
我正在使用TPL在我的代码中创建新任务。所有这些都可以提高性能。但是每当有像Context.currentuser.iDentifier这样的HTTPContext对象。这段代码会抛出一个异常说HTTP对象对象不可用。空引用异常。 我想知道如何将上下文对象传递给任务对象?为什么httpcontext对象在使用任务并行库任务时不可用?
这是因为并行线程没有在相同的上下文中执行。你需要通过SynchronizationContext它。 在TPL中,您可以使用TaskScheduler.FromCurrentSynchronizationContext()
来传递上下文。
在我的项目之一,我已经做了这样的事情 -
Task.Factory.StartNew(() => MyMethod(),
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext());
的[?什么是一个NullReferenceException,以及如何解决呢(可能的复制http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – rene
只有在处理传入请求的线程中访问它时,HttpContext.Current才为空。使用TPL你可以在不同的线程中执行代码。详细信息 - http://stackoverflow.com/questions/19509672/why-is-httpcontext-current-null – Nikolay
@rene,这不重复。你提到的问题是通用的.NET框架空引用异常。 – kevalsing