2016-07-27 235 views
0

我有我的控制器这个方法:如何使用异步任务返回

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; 
       } 
     } 
    } 

正如你所看到的,我想要去到另一个控制器,但是当我写的回报,它提供了以下错误:

匿名功能转换成一个空隙返回委托不能 返回一个值

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

你能告诉我,我怎么能去到另一个控制器从该控制器?谢谢。

+3

这是整个代码?请提供整个代码以及出现错误的行。 – Euphoric

+0

重要的是要知道'RedirectToAction'具有哪种返回类型 –

+1

@Euphoric我编辑了这个问题。整个代码是几百行。所以我在给出错误的地方。 – jason

回答

1

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

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

一些块的返回类型不隐式转换为委托返回类型

你在做其他的代码在一些地方猜测那些没有返回RedirectToAction的东西。作为明确的类型可能不会解决这一点,但应该可以帮助您找到问题,即

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

您的代码的其他一些观点,可能是值得检查过