C# “我怎样才能回来”;“好的”;无需等待内部方法完成即可立即执行
我需要实现一个方法,该方法不希望对另一个方法的调用返回OK。如何做到这一点 我尝试使用'wait',但此等待结束返回“OK”C# “我怎样才能回来”;“好的”;无需等待内部方法完成即可立即执行,c#,asynchronous,C#,Asynchronous,我需要实现一个方法,该方法不希望对另一个方法的调用返回OK。如何做到这一点 我尝试使用'wait',但此等待结束返回“OK” 对方法的调用,该方法立即返回一个OK,通知文件的接收。在后台,被调用的方法将一直工作到完成,并且在完成时不会返回任何内容。如果要派生一个新的异步任务。此示例使用static Task.Run并传入匿名异步任务。对Task.Run()的调用是同步执行的,但Task.Run()中匿名任务的执行不是同步执行的,它完成得如此之快 using System.Threading.Ta
对方法的调用,该方法立即返回一个OK,通知文件的接收。在后台,被调用的方法将一直工作到完成,并且在完成时不会返回任何内容。如果要派生一个新的异步任务。此示例使用static 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)
{
}
使用System.Threading.Tasks;
[WebMethod]//WebServiceMethod
公共异步任务IMPORTADADOSPOLEILAOVALERES(字符串文件名)
{
//此呼叫可能需要几分钟时间,不应出现这种情况
ImportaDados(文件名);
返回“OK-Received”;//立即
}
公共异步任务ImportaDados(字符串文件名)
{
}
任务在线程上运行,并由管理每个任务的同步状态的计划程序执行。除非有特定的理由,否则不要直接使用线程 嗯,没问题吧?好。请继续你的练习。还要注意,当前的代码示例存在无限递归,在调用时基本上会导致堆栈溢出(双关语)……好消息是,这可能不会花费几分钟时间。请查看System.Threading命名空间。您应该能够生成一个新线程来运行
ImportaDados
。文件上载应该将文件放到文件共享或某个存储位置。构建一个小型控制台应用程序,监控该位置并对其进行反应和处理。长时间运行的处理作业不属于web服务器应用程序。您只是在长时间使用线程,并引入了一个可被利用的漏洞。如果作业运行很长时间,我可以向您发送垃圾邮件(除非您有保护),并耗尽您的线程池。Task.Run(async()
异步有必要吗?它有什么作用?@mmmaxwwell在第一个任务中没有理由使用异步
。运行-任务。运行是创建将在线程池上执行的新任务的功能。如果没有等待,则不需要异步。这一行将生成CS1998警告-
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)
{
}