Я новичок в. NET Задачи и асинхронное c кодирование, поэтому я просто хотел бы знать, что я должен делать в моем случае:
У меня есть. NET Core WebApi, который получает файл XML, который служит триггером для следующего процесса:
- Мне нужно, чтобы процесс выполнялся в "фоновом режиме", поэтому я имею в виду, что вызывающая сторона API должна немедленно получить ответ и затем процесс должен запускаться
- Мне нужно проанализировать XML для объекта
- С этими данными мне нужно связаться с 3 API
- Если какой-либо из этих API не отвечает или не может получить необходимые данные, нам нужно остановить и записать это
- Если все данные получены, мне нужно выполнить расчет с этими данными (получить некоторые данные из базы данных и рассчитать с API и данными базы данных)
Когда расчет будет завершен, мне нужно отправить электронное письмо и связаться с другим API
7. И самое главное: я в безопасности с этим из-за AppRecycle?
Это просто для того, чтобы объяснить мою ситуацию, поэтому у меня есть следующее:
[HttpPost]
public async Task<JsonResult> DepositAsync([FromBody] Taa message){
try
{
Api1Response api1Response = await this.GetApiData1();
Api1Response api2Response = await this.GetApiData2();
// If all of this was successful, do the calculation
CalculationResult result = await this.CalculateAsync(api1Response, api2Response);
// Notify
await Notify(result);
}
catch (Exception ex)
{
Log.Error($"Something went wrong: {ex.Message}", ex);
throw;
}
return new JsonResult(new ApiResponse<string>(requestId.ToString(), Response, StatusCodes.Status200OK) { Data = "Success" });
}
Вопрос, который у меня сейчас есть:
- Когда мне нужно использовать Task.Run (() => {}); Внутри методов GetApiData1 (), GetApiData2 (), чтобы выполнить вызов Http?
- Нужно ли вызывать методы GetApi внутри Task.Run (() => {}); ?
- В общем, когда мне нужно использовать Task.Run, а когда нет?
Или мне просто нужно сделать это:
[HttpPost]
public async Task<JsonResult> DepositAsync([FromBody] Taa message){
try
{
Task.Run(() => {
Api1Response api1Response = await this.GetApiData1();
Api1Response api2Response = await this.GetApiData2();
// If all of this was successful, do the calculation
CalculationResult result = await this.CalculateAsync(api1Response, api2Response);
// Notify
await Notify(result);
});
}
catch (Exception ex)
{
Log.Error($"Something went wrong: {ex.Message}", ex);
throw;
}
return new JsonResult(new ApiResponse<string>(requestId.ToString(), Response, StatusCodes.Status200OK) { Data = "Success" });
}
Большое спасибо!