私は非同期Web APIプログラミングに関する非常に基本的な疑問があります。私はSaveCaseSearchを私のコントローラに非同期で呼びたいと思っています。しかし、コールはDALのさまざまなレイヤーを通過し、最終的にDBを呼び出します。Web Apiの非同期コントローラ
これらの連続コールも非同期にする必要がありますか?
私は非常に非同期的な世界に新しいので、私はすでにいくつかの間違いを犯している可能性があります。何かが間違っているようであれば私を修正してください
は今、非同期モードで呼び出す必要がある
/*Create API for Case*/
[HttpPost]
[Route("createcase")]
public IHttpActionResult PostCreateCase([FromBody] ARC.Donor.Business.Case.CreateCaseInput CreateCaseInput)
{
ARC.Donor.Service.Case.CaseServices cs = new ARC.Donor.Service.Case.CaseServices();
var searchResults = cs.createCase(CreateCaseInput);
List<CreateCaseOutput> searchOutputResults = (List<CreateCaseOutput>)searchResults;
if (!string.IsNullOrEmpty(searchOutputResults.ElementAt(0).o_case_seq.ToString()))
SaveCaseSearchDetails(SaveSearchInput); /*This should be called asynchronously*/
return Ok(searchResults);
}
この
SaveCaseSearchDetails:
ので、コントローラのため、私は以下のような何かをやっています。だから私は書かれています:
[HttpPost]
public async Task<IHttpActionResult> SaveCaseSearchDetails([FromBody] ARC.Donor.Business.SaveSearchInput SaveSearchInput)
{
ARC.Donor.Service.Case.CaseServices cs = new ARC.Donor.Service.Case.CaseServices();
var searchResults = await cs.saveCaseSearchDetails(SaveSearchInput);
}
をそれが正しい
されている場合は、連続した呼び出しがあまりにも非同期すべきか?
今、彼らは
public IList<Entities.Case.SaveCaseSearchOutput> saveCaseSearch(ARC.Donor.Data.Entities.Case.SaveCaseSearchInput SaveCaseSearchInput)
{
Repository rep = new Repository();
string strSPQuery = string.Empty;
List<object> listParam = new List<object>();
SQL.CaseSQL.getCreateCaseParameters(SaveCaseSearchInput, out strSPQuery, out listParam);
var AcctLst = rep.ExecuteStoredProcedure<Entities.Case.SaveCaseSearchOutput>(strSPQuery, listParam).ToList();
return AcctLst;
}
あるために
SQL.CaseSQL.getCreateCaseParameters
方法は、非同期的に呼び出される必要がありますか? しかし、その場合はすぐに次の行
rep.ExecuteStoredProcedure
が正常に右に実行することはできませんか? strSPQueryは前の行自体から来ているので?
私は間違った方法で考えていますか?私を修正してください。
'これらの連続した呼び出しも非同期にするべきですか? ' 「真の」非同期機能が必要な場合はあります。 –
しかし、その場合、私が描いた最後のケースのように、それは正しく機能しませんか? – StrugglingCoder
「非同期」は何を期待していますか?ブロッキング操作が*非同期でない限り、スレッドをブロックして実行する必要があります。 –