ASP.NET MVC中的任务<t> .Factory.StartNew

时间:2017-12-08 20:21:04

标签: c# asp.net-mvc async-await task

我遇到了问题。我需要帮助......

一般来说,我有一个ASP.NET MVC 5项目。当用户点击&#34;保存&#34;按钮,我在新创建的任务中运行一些代码。我需要知道操作的结果,所以我返回我的类ChangesMade的实例。然后我将对象序列化为JSON格式并传递给视图。然后我检查结果是否为真,我在新窗口中打开一个URL。

所以,在我的控制器中,我有以下内容:

public async Task<ActionResult> Save(here some parameters) 
{ 
    var changes = await _model.SaveAsync(some parameters); 
    return NewtownJson(changes); 
}

主要的保存逻辑如下:

public async Task<ChangesMade> SaveAsync(some parameters here)
{
    var data = (await _model.GetData(some parameter)).ToList();

    // create a task of ChangesMade that contains public bool property MemoAdded 
    // that I need to pass to a view to know the result of operation
    var task = Task<ChangesMade>.Factory.StartNew(() =>
    {
        ChangesMade changes = new ChangesMade();
        try
        {
            using (var tr = new TransactionScope())
            {
                // some code here omitted for simplicity…

                // if (someCondition == true) changes.MemoAdded = true;                 

                tr.Complete();
            }

            return changes;
        }
        catch (Exception ex)
        {
            throw ex;
        }                
    });

    try
    {
        task.Wait();
    }
    catch (AggregateException ex)
    {
        string msg = "";
        msg= ex.Flatten().InnerExceptions
                    .Where(e => e != null)
                    .Select(e => e.Message)
                    .Aggregate(msg, (current, message) => current + " " + message + ";")
                    .TrimEnd(';');
        throw new Exception(msg);               
    }

    return task.Result;
}

我在IIS上的两个站点上发布项目。第一个工作正常。但是第二个没有 - 由于某种原因,它总是返回change.Memo在视图中添加了false。

我无法找到原因。我不知道该怎么做......

0 个答案:

没有答案