C# 在RESTful WebApi请求上运行后台线程

C# 在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

后台工作流: 我有一个客户端jquery/ajaxhtml页面,调用我们的restfulwebapi来获取一些患者“遭遇”的数据,例如入院、就诊等。。e、 g

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。一个更可靠的解决方案将把后台工作保存在存储器中,并有一个独立的后端进行处理。我描述