调用函数,永远不要在C#中等待它


26

我的mvc4 Web应用程序中有一个控制器,其中有一个需要调用另一个函数的动作。该函数会发生什么,即返回值对我的操作并不重要。我如何才能调用该函数而从不等待其执行?

我认为可以通过异步完成此操作,但我的意思是不使用资源,只需调用函数就不要等待发生的任何事情。

请给我一些建议。



唯一的方法是将其传递给另一个线程。除非没有希望,否则没有调用没有资源的函数之类的事情。
罗伯特·哈维,

谢谢,我的意思是最好的和优化的方法,我认为最好的方法是Task.Run并在MVC中使用WebApi,基于提到的链接@ user814064,也许我可以只使用JavaScript解决方案,但是我认为这不是专业的!
user2675751 2013年

Answers:


40
private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}

注意,在不关心结果或可能引发的异常的情况下启动方法是有风险的。

如果在中引发了异常Task,它将被隐藏,直到您:

  1. 观察结果,
  2. Wait() 用于任务,或:
  3. GC在上调用终结器Task

您可以在调用该方法后不久处理自己1.和2.,也可以附加一个继续符,myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)以在原始任务引发异常时运行。3.将使您的进程崩溃;不要那样做


3
您能否在“ 3.将使您的进程崩溃;不要这样做”上进行扩展。这不是自动完成的吗?
rdans 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.