自定义任务运行器方法抛出ArgumentException

时间:2014-05-24 16:14:01

标签: c# task-parallel-library argumentexception

由于CultureInfo没有从线程复制到线程,我已经使用以下方法为我做这件事。

public static StartCustomTask(Action action, TaskCreationOptions tco = TaskCreationOptions.None)
{
    var currentCult = Thread.CurrentThread.CurrentCuture;
    var currentUiCult = Thread.CurrentThread.CurrentUICulture;

    return Task.Factory.StartNew(() =>
    {
        Thread.CurrentThread.CurrentCuture = currentCult;
        Thread.CurrentThread.CurrentUICulture = currentUiCult;
        action();
    }, tco);
}

基本上这段代码将文化信息从当前线程复制到将要执行action的线程。我不知道为什么,但它会System.ArgumentExceptionValue does not fall within the expected range。我试图在主线程上定期运行动作,它完美无缺。我的意思是,作为一个动作的方法本身没有问题,我想在上面的代码中有一个问题。

这是异常的堆栈跟踪

at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name)
   at System.Web.HttpRequest.BuildUrl(Func`1 pathAccessor)
   at System.Web.HttpRequest.get_Url()
   at SL.CoreLogic.Web.FrontEnd.Controllers.AccountController.<>c__DisplayClass37.<ResetPassword>b__31() in d:\CoreProjects\CoreLogic\CoreLogic-RusSlot\SL.CoreLogic\SL.CoreLogic.Web.FrontEnd\Controllers\AccountController.cs:line 447
   at SL.CoreLogic.Common.CustomTask.<>c__DisplayClass1.<StartWithCurrentCulture>b__0() in d:\CoreProjects\CoreLogic\CoreLogic-RusSlot\SL.CoreLogic\SL.CoreLogic.Common\CustomTask.cs:line 22
   at System.Threading.Tasks.Task.

还有一件事。这段代码工作得很好,但突然之间就开始这么做了。

1 个答案:

答案 0 :(得分:1)

我明白了。问题是该操作包含类似于Url = Request.Url的行,因为我猜在执行代码时,Request对象不存在或未设置。