如何在异步任务中使用return

时间:2016-07-27 05:55:30

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我的控制器中有这个方法:

    public async Task<ActionResult> GetDetails(Query query)
    {
        var son = await Task.Run(() =>
        {
            if(query.Export)
            {
               return RedirectToAction("GetDetails", "GridToolController");
            }

                if (!query.Export)
                {
                    db.Configuration.AutoDetectChangesEnabled = false;
                }
         }
    }

正如你所看到的,我想去另一个控制器,但是当我写回来时,它会给出这些错误:

  

匿名函数转换为void返回委托不能   返回一个值

     

无法将lambda表达式转换为预期的委托类型,因为   块中的某些返回类型不可隐式转换   到委托的返回类型

你能告诉我怎么能从这个控制器转到另一个控制器吗?感谢。

1 个答案:

答案 0 :(得分:1)

  

转换为void返回委托的匿名函数无法返回值

该行解释得很好,您正在创建一个返回void的匿名函数() =>。这可能令人困惑,Task.Run返回Task这不是无效的,但它没有像Task那样的通用类型。但是有Task.Run可以很好地返回Task<TResult>,因为

  

块中的某些返回类型不能隐式转换为委托返回类型

在该代码的某些地方猜测你正在做其他没有返回RedirectToAction的事情。明确的类型可能无法解决这个问题,但应该帮助您找到问题,即

var son = await Task.Run<ActionResult>(() =>

您的代码上的其他一些点也可能值得检查

相关问题