C# webrequest已响应时启动异步函数的正确方法

C# webrequest已响应时启动异步函数的正确方法,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我做了一个需要更快响应的webservice调用,所以我想在实际开始处理数据之前返回一个响应。这是我的代码: [Authorize] public async Task<ActionResult> Webcall(string Command, string Params) { // Run commands switch (Command) { case "FormulierAchterlaten": // initi

我做了一个需要更快响应的webservice调用,所以我想在实际开始处理数据之前返回一个响应。这是我的代码:

[Authorize]
public async Task<ActionResult> Webcall(string Command, string Params)
{
    // Run commands
    switch (Command)
    {
        case "FormulierAchterlaten":
            // initialise the helper
            Formulier_Helper helper = new Formulier_Helper()
            {
                db = db,
                XMLData = Params
            };

            // !!!!!!!!!!! THESE CALLS NEED TO ME THE OTHER WAY AROUND !!!!!!!!!!!

            // run the process
            await helper.FormulierAchterlaten();

            // return that the message has been received ok
            return Content("OK");

            // !!!!!!!!!!! THESE CALLS NEED TO ME THE OTHER WAY AROUND !!!!!!!!!!!

            // So what I want is:
            // return Content("OK");
            // Then:
            // await helper.FormulierAchterlaten();
    }

    // Return we didn't find the command
    return Content("Error: Command not found");
}
[授权]
公共异步任务Webcall(字符串命令、字符串参数)
{
//运行命令
开关(命令)
{
案例“FormulierAchterlaten”:
//初始化助手
Formulier\u Helper=新的Formulier\u Helper()
{
db=db,
XMLData=Params
};
//!!!!!!!!!!!!!!!!!这些电话需要从另一个方向打给我!!!!!!!!!!!
//运行进程
wait helper.FormulierAchterlaten();
//返回消息已接收正常
返回内容(“确定”);
//!!!!!!!!!!!!!!!!!这些电话需要从另一个方向打给我!!!!!!!!!!!
//所以我想要的是:
//返回内容(“确定”);
//然后:
//wait helper.FormulierAchterlaten();
}
//我们没有找到命令
返回内容(“错误:未找到命令”);
}
一旦我到达“helper.FormulierAchterlaten();”我已经知道连接是有效的,所以我希望它返回“OK”,然后开始“helper.FormulierAchterlaten();”调用

我知道我可以通过删除“wait”来实现这一点,但在我看来,这不是正确的方法,因为当我这样做时,编译器会立即向我发出警告。那么,创建线程的正常方式是什么呢


抱歉,如果这看起来很奇怪,我自己找不到这些基本信息,但出于某种原因,MSDN文章对我来说真的很难理解

您误解了
等待
的功能,因此无法找到任何信息<代码>等待等待已在运行的异步操作。它不会启动它。它不用于提前返回,它用于在等待异步/长时间运行的操作完成时避免阻塞。因此,我应该将其包装在一个新线程中,一切都应该正常?顺便说一句,您似乎应该删除所有代码并使用内置的身份验证机制。MD5作为散列密码的一种方式已经过时。请求日志记录始终可用。在任何情况下,执行身份验证、额外日志记录等的正确位置都是middelware Classes否,您应该删除所有这些代码并使用内置的ASP.NET标识。它使用1024次SHA1迭代来散列密码。如果您所说的异步是指在后台长期运行的作业,则概念完全不同。这不是异步的。您可以使用
QueueBackgroundWorkItem
方法启动长时间运行的作业,并将其告知ASP.NET。或者使用像Hangfire这样的工具。Scott Hanselman解释了中的选项以及为什么不能仅使用
Task.Run
Thread.Start