相关疑难解决方法(0)

asp.net mvc 4.5:让 HostingEnvironment.QueueBackgroundWorkItem 工作

控制器完成他的工作后,我试图完成一些轻量级任务,我HostingEnvironment.QueueBackgroundWorkItem()为此而使用。

我看到了一个奇怪的行为,所以我为此制作了一个人为的概念验证应用程序。

在我的global.asax.cs我有这个不错的功能:

public class MvcApplication : HttpApplication
{
    private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

    public static void ContinueWorkOnBackground(Task workItem)
    {
        workItem.ContinueWith(t =>
        {
            if (t.IsFaulted)
            {
                var ex = t.Exception;
                logger.Error(ex);
            }
        });
        HostingEnvironment.QueueBackgroundWorkItem(_ => workItem);
    }
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我创建了一个工作项并将其扔到那里:

public ActionResult About()
{
    logger.Info("About");
    ViewBag.Message = "Your application description page.";
    MvcApplication.ContinueWorkOnBackground(TestWorkItem());
    return View();
}

private async Task TestWorkItem()
{
    logger.Trace("TestWorkItem");
    await Task.Delay(500);
    logger.Trace("let's fail");
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

我在日志中看到消息“TestWorkItem”,但从来没有“让我们失败”,也没有关于错误的消息。

我还HostingEnvironment.QueueBackgroundWorkItem((Func<CancellationToken,Task>)(_ => workItem)); …

asp.net-mvc task-parallel-library asp.net-mvc-4

2
推荐指数
1
解决办法
1692
查看次数