gpt4 book ai didi

c# - 等待方法什么时候退出程序?

转载 作者:行者123 更新时间:2023-12-03 13:18:45 25 4
gpt4 key购买 nike

我一直在阅读 following post ,特别是这一点:

On your application’s entry point method, e.g. Main. When you await an instance that’s not yet completed, execution returns to the caller of the method. In the case of Main, this would return out of Main, effectively ending the program.



我一直在尝试这样做,但我似乎无法让它退出。这是我的代码:
class Program
{
// ending main!!!
static async Task Main(string[] args)
{
Task<Task<string>> t = new Task<Task<string>>(async () =>
{
Console.WriteLine("Synchronous");
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Synchronous");
Console.WriteLine("Synchronous I is: " + i);
await Task.Run(() => { Console.WriteLine("Asynchronous"); });
await Task.Run(() => { for (int j = 0; j < 1000; j++) { Console.WriteLine( "Asynchronous, program should have exited by now?"); }});
}
return "ASD";
});
t.Start();
await t;
}
}

我到底错过了什么?程序不应该在点击行时退出 await t;或通过关注 await Task.Run(() => { Console.WriteLine("Asynchronous"); }); 的线程?

这是控制台应用程序的主要方法。

最佳答案

您链接的文章来自 2012 年,它早于向 Main() 添加异步支持,这就是为什么它所谈论的似乎是错误的。

对于当前的实现,请考虑以下代码:

public static async Task Main()
{
Console.WriteLine("Awaiting");
await Task.Delay(2000);
Console.WriteLine("Awaited");
}

这被编译器转换如下(我使用 "JustDecompile" 反编译它):
private static void <Main>()
{
Program.Main().GetAwaiter().GetResult();
}

public static async Task Main()
{
Console.WriteLine("Awaiting");
await Task.Delay(2000);
Console.WriteLine("Awaited");
}

现在您可以看到为什么程序不退出了。
async Task Main()static void <Main>() 被调用等待 Taskasync Task Main() 返回在程序退出之前完成(通过访问 .GetResult() )。

关于c# - 等待方法什么时候退出程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58659002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com