我如何立即返回“确定”而无需等待内部方法完成

时间:2019-05-30 17:19:33

标签: c# asynchronous

我需要实现一个方法,该方法不希望返回对另一个方法的调用来返回OK。该怎么做?

我尝试使用'await',但这要等到返回“ OK”

[WebMethod] //WebServiceMethod
public string ImportaDadosPosLeilaoValores(string fileName)
{
    // this call may take several minutes and should NOT be expected
    ImportaDados(fileName);
    return "OK - Received";     // immediately
}

对方法的调用,即立即返回OK通知接收文件,在后台,被调用的方法将一直工作到完成,完成后将不返回任何内容

1 个答案:

答案 0 :(得分:-1)

您要衍生一个新的异步任务。本示例使用静态Task.Run并传入匿名异步任务。对Task.Run()的调用是同步执行的,但是在Task.Run()中匿名任务的执行却没有,它看起来是如此之快就完成了。

using System.Threading.Tasks;

[WebMethod] //WebServiceMethod
public string ImportaDadosPosLeilaoValores(string fileName)
{
    // this call may take several minutes and should NOT be expected
    Task.Run(() => {
        ImportaDados(fileName);
    }); 
    return "OK - Received";     // immediately
}

我不熟悉[WebMethod]的来源,但您可能想完全异步。在此示例中,您的调用方法和被调用方法是异步的,并且不等待被调用任务,这将按您希望的方式执行。

using System.Threading.Tasks;

[WebMethod] //WebServiceMethod
public async Task<string> ImportaDadosPosLeilaoValores(string fileName)
{
    // this call may take several minutes and should NOT be expected
    ImportaDados(fileName);
    return "OK - Received";     // immediately
}

public async Task ImportaDados(string filename)
{

}

任务在线程上运行,并由管理每个任务的同步状态的调度程序执行。除非有特殊原因,否则不要直接使用线程。

相关问题