簡體   English   中英

如何調用異步任務<ActionResult<> &gt; 從另一種方法

[英]How to call an async Task<ActionResult<>> from another method

我有以下方法,我想從同一個控制器中的另一個方法調用它。 我試過 Task.Run 但我似乎無法讓它工作。 這是 .Net 核心。

這是我要調用的方法:

[HttpGet("GetInfo")]
public async Task<ActionResult<InfoModel>> GetInfo()
  {
     InfoModel si = new InfoModel()
     //Do work
     return si
  }          

然后我想在另一個 API 方法中調用它(如下)

[HttpPost("GetOtherInfo")]
public async Task<ActionResult<NewModel>> GetOtherInfo(RequestInfoModel req)
  {
     NewModel ret = new NewModel();
     //Do some work
     //Need some data from the GetInfo() method 
     InfoModel im1 = GetInfo();  //This does not work
     //Do work with im1
     return ret;
  }

我正在尋求有關如何從 GetOtherInfo() 調用 GetInfo() 的幫助。 先感謝您。

如果您的方法返回Task<X> ,則需要await結果。

[HttpPost("GetOtherInfo")]
public async Task<ActionResult<NewModel>> GetOtherInfo(RequestInfoModel req)
  {
     NewModel ret = new NewModel();
     //Do some work
     //Need some data from the GetInfo() method 
     InfoModel im1 = await GetInfo(); 
     //Do work with im1
     return ret;
  }

請注意,遵循約定並將Async后綴添加到返回Task方法通常是個好主意。

例如: GetInfoAsync()

作為控制器操作GetInfo()旨在在滿足請求時由框架調用。

除此之外還必須調用它的事實違反了 SRP/SoC 和代碼異味。 這表明需要重構。

如果僅在此控制器外部需要,則將該功能移動到另一個方法或另一個類中。 這樣它就可以根據需要重復使用。

private Task<InfoModel> getInfoAsync() {
    InfoModel model = new InfoModel();

    //Do async work

    return model;
}

[HttpGet("GetInfo")]
public async Task<ActionResult<InfoModel>> GetInfo() {
    InfoModel model = await getInfoAsync();

    //and additional work needed specific to this request

    return model;
}

[HttpPost("GetOtherInfo")]
public async Task<ActionResult<NewModel>> GetOtherInfo(RequestInfoModel req) {
    NewModel ret = new NewModel();

    //Do some work

    //Need some info data
    InfoModel im1 = await getInfoAsync();

    //Do work with im1

    return ret;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM