繁体   English   中英

该程序会被视为异步程序吗?

[英]Would this program be considered asynchronous?

假设我有一个简单的程序,例如

public static main(string[] args)
{
    Task<int> hotTask = Task<int>.Run(() => SomethingThatRunsInBackgroundAndReturnsAnInt());
    DoIndependentWork();
    hotTask.Wait(); 
    Console.WriteLine(hotTask.Result);
}

尽管它运行不需要在下一个工作单元( DoIndependentWork() )开始和完成之前完成的后台线程, DoIndependentWork()技术上讲,这在技术上是“同步的”吗? 我在互联网上的任何地方都找不到很好的技术定义。

据此: 异步与同步执行的真正含义是什么?

当您同步执行某项任务时,您需要等待其完成才能继续执行其他任务。 当您异步执行某些操作时,您可以在完成任务之前继续执行其他任务。

在您的情况下,您执行SomethingThatRunsInBackgroundAndReturnsAnInt()而不必等待任务结束,而是执行另一个函数,这意味着它是一个异步程序

是的,但从技术上讲,不是

也许这是一个小问题,但我要指出您的程序使用异步操作,但本身不是异步的。 这是因为在程序完成处理之前,程序的main方法将不会返回。

当我们谈论异步方法时,我们并不是在谈论使用多个线程的方法。 我们正在谈论一种几乎在工作完成之前立即返回的方法。 同样,对于一个程序,我们不是在谈论使用多个线程的程序,而是要在工作完成之前立即返回的程序。

Windows Service是异步程序的一个示例。 操作系统将调用服务的OnStart方法,该方法几乎立即返回。 同时,服务维护另一个异步执行主要工作的线程。

因此,您的程序不符合定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM