我们如何从c#中的async Action方法中获取值

本文关键字:方法 Action 获取 async 中的 我们 | 更新日期: 2023-09-27 17:59:32

我有一个类似的async方法

[HttpPost]
public async Task<JsonResult> AddTwoIntegers(int param1, int param2)
{         
   var result = await (param1 + param2);
   return Json(new {finalValue: result}, JsonRequestBehavior.AllowGet)            
}

现在在另一个Action Method中,我调用这个函数

public ActionResult SomeFunction(string userSettingsViewModel)
{          
      Task<JsonResult> jsonData = this.AddTwoIntegers(5,10);          
      jsonData.ContinueWith(task =>
      {
           JsonResult result = task.Result;
           if (result.Data.ToString() == "") {
                var data = result.Data;
           }            
      });
      // I want to retrieve the value returned and use that value in some operation.
      return Json("Success", JsonRequestBehavior.AllowGet);
}

如何从Action Result中获取返回值。

我们如何从c#中的async Action方法中获取值

您需要更改方法以返回Task<ActionResult>并将其标记为async,然后等待AddTwoIntegers()的结果。。。

public async Task<ActionResult> SomeFunction(string userSettingsViewModel)
{          
    JsonResult result = await this.AddTwoIntegers(5, 10);  
    var jsonData = result.data;
    // ...
    return Json("Success", JsonRequestBehavior.AllowGet);
}

为了完整性,示例方法应该是这样的。。。

[HttpPost]
public Task<JsonResult> AddTwoIntegers(int param1, int param2)
{         
   var result = param1 + param2;
   return Task.FromResult(Json(new {finalValue: result}, 
                               JsonRequestBehavior.AllowGet));            
}

应该是这样的:

JsonResult = await AddTwoIntegers(5,10);

查看MSDN示例

然后您需要声明在操作之外存储结果的变量。然后使用变量。

任务jsonData=this。AddTwoIntegers(5,10);

   Type data = null; //Note that I put Type because I don't know your type for result.Data 
  jsonData.ContinueWith(task =>
  {
       JsonResult result = task.Result;
       if (result.Data.ToString() == "") {
             data = result.Data;
       }            
  });
  // I want to retrieve the value returned and use that value in some operation.
  //Now you can use your variable data here!!
  return Json("Success", JsonRequestBehavior.AllowGet);

}