C# 在RESTful WebApi请求上运行后台线程
后台工作流: 我有一个客户端jquery/ajaxhtml页面,调用我们的restfulwebapi来获取一些患者“遭遇”的数据,例如入院、就诊等。。e、 gC# 在RESTful WebApi请求上运行后台线程,c#,asp.net,multithreading,asynchronous,task,C#,Asp.net,Multithreading,Asynchronous,Task,后台工作流: 我有一个客户端jquery/ajaxhtml页面,调用我们的restfulwebapi来获取一些患者“遭遇”的数据,例如入院、就诊等。。e、 g public async Task<string> GetEncounters(string patientId) { PatientChart patientChart = await _myService.GetPatientChart(patientId); string message
public async Task<string> GetEncounters(string patientId)
{
PatientChart patientChart = await _myService.GetPatientChart(patientId);
string message = string.Empty;
if (patientChart.Encounters.Status == PatientChart.StatusNotApplicable)
{
message = "List of Encounters is not available. A request has been made to retrieve it.";
_myService.GetEncounters(patientId); // async method without call to await
}
return message;
}
问题:
如果上面的getConferences调用没有应用wait关键字,会发生什么情况?
据我所知,异步方法不会生成新线程
那么,当主线程死亡时,这是否意味着对GetConferences的调用将中止?
在幕后,GetConferences将启动一个长时间运行的进程来获取数据并将其存储在缓存中,以供以后检索
如果我一步一步地看代码,每个都会按预期执行。同样,如果我添加wait关键字,它也可以工作。但我会让呼叫者阻塞
解决办法是什么?
i、 e.创建后台任务/线程以执行代码的最佳方法是什么,即使主线程已死亡?解决方案取决于您希望工作的可靠性。也就是说,如果您返回NotAvailable消息,那么运行GetConferences对您来说有多重要
您至少应该向ASP.NET注册后台工作,即HostingEnvironment.QueueBackgroundWorkItem。一个更可靠的解决方案将把后台工作保存在存储器中,并有一个独立的后端进行处理。我描述。解决方案取决于您希望工作的可靠性。也就是说,如果您返回NotAvailable消息,那么运行GetConferences对您来说有多重要 您至少应该向ASP.NET注册后台工作,即HostingEnvironment.QueueBackgroundWorkItem。一个更可靠的解决方案将把后台工作保存在存储器中,并有一个独立的后端进行处理。我描述