我想打印每2秒钟的数字,但最后我只得到0我需要做的每2秒获得一次?
结果:
0
1
.
.
49
private static void Main(string[] args) {
Send();
}
public static async Task Send() {
for (int i = 0; i < 50; i++) {
Console.WriteLine(i);
await Task.Delay(2000);
}
}
答案 0 :(得分:1)
好吧,只是因为您的Main
方法不会等待发送方法完成,您无法使用await
关键字,因为编译器发生了这种情况不允许async
Main
,在这种情况下,您可以简单地使用Task.Run
private static void Main(string[] args)
{
Task.Run(async () =>
{
await Send();
}).Wait();
}
public static async Task Send()
{
for (int i = 0; i < 50; i++)
{
Console.WriteLine(i);
await Task.Delay(2000);
}
}
答案 1 :(得分:0)
您缺少的是Console.ReadLine()调用,用于在执行任务之前停止控制台退出程序。测试下面的代码,它的工作原理。
private static void Main(string[] args)
{
Send();
Console.ReadLine();
}
public static async Task Send()
{
for (int i = 0; i < 50; i++)
{
Console.WriteLine(i);
await Task.Delay(2000);
}
}
答案 2 :(得分:0)
以Josephs的答案为基础,但在一个更通用的“如何做异步控制台应用程序”-way
在控制台应用程序中使用异步代码可能有点棘手。我通常使用原始Main()调用的替代MainAsync方法并进行阻塞等待。
以下是一个如何完成的示例:
class Program
{
static void Main(string[] args)
{
Task mainTask = MainAsync(args);
mainTask.Wait();
// Instead of writing more code here, use the MainAsync-method as your new Main()
}
static async Task MainAsync(string[] args)
{
await Send();
Console.ReadLine();
}
public static async Task Send()
{
for (int i = 0; i < 50; i++)
{
Console.WriteLine(i);
await Task.Delay(2000);
}
}
}