为什么我的Task.Run()没有在控制台应用程序中执行?

问题描述 投票:0回答:1

我一直在努力使用从另一个开发人员那里检索到的控制台应用程序。 客户端需要一个异步运行的控制台应用程序来确认调用者的执行(我猜在控制台中打印了一行)并让脚本随后运行。

        static int batchId = 0;
        static int requestId = 0;

        static void Main(string[] args)
        {
#if DEBUG
            while (true)
            {
                // This method set our 2 var up above with value typed in the console. It's only for testing purpose
                GetKeyTappedBis();
                if (batchId > 0 && requestId > 0) break;
            }
#else
            SetArguments(args);
#endif
            ServiceProviderFactory.ServiceProvider = new ServiceCollection()
                // ...
                .BuildServiceProvider();
            Task.Run(async () =>
            {
                Console.WriteLine($"Batch n°{batchId} will be executed.");
                await Application.Run(batchId, requestId);
            });
        }

我可能在理解异步执行时遇到一些困难。但我真的不明白为什么这段代码,当我尝试调试它时,我无法进入

Application.Run()
执行。除非我在
Console.ReadLine()
之后插入
Task.Run()
,然后它将执行我的方法。

在问这个问题之前我没有找到任何帮助。

c# .net async-await task console-application
1个回答
2
投票

你会挥手等待!如果您不等待它,您的主线程将在没有执行异步任务的情况下终止:

var t = Task.Run(....);
await t;
© www.soinside.com 2019 - 2024. All rights reserved.