[英]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.