【发布时间】:2026-01-16 22:55:02
【问题描述】:
假设我有一个简单的程序,比如
public static main(string[] args)
{
Task<int> hotTask = Task<int>.Run(() => SomethingThatRunsInBackgroundAndReturnsAnInt());
DoIndependentWork();
hotTask.Wait();
Console.WriteLine(hotTask.Result);
}
这在技术上是否是“同步的”,尽管它运行一个不需要在下一个工作单元 (DoIndependentWork()) 开始和完成之前完成的后台线程?我在互联网上的任何地方都找不到非常好的技术定义。
【问题讨论】:
-
在我看来确实是异步的。您可能会考虑重写它以将大部分工作移出 main 并进入异步辅助方法。
-
主函数是同步的,因为 .Wait()。但是,由于主要同步处理 2 个任务,您可以调用此并行处理。我很想知道为什么你的程序命名如此重要。
-
谁在强迫你遵守一个或另一个定义?该程序是否工作?证明是正确的吗?这些问题不是比尝试对程序进行分类更好吗?如果您确实需要将您的程序分类为同步或异步,我宁愿看看您的问题制定者定义了哪些具体规则。
-
在旁注中,我很嫉妒你得到了@EricLippert 本人的回答。恭喜!
标签: c# .net multithreading asynchronous task