我想暂停程序,以便它不会关闭。我有一个在主线程中运行的代码。尝试这种方式,但这个代码立即跳过,程序关闭而不是等待。
如何让它等待WaitMy方法完成?
static void Main(string[] args)
{
//any code here...
Console.WriteLine("Discovery started");
WaitMy();
}
private async static void WaitMy()
{
//await Task.Delay(30 * 1000);
await Task.Run(async () => await Task.Delay(30 * 1000));
}
应用程序使用.net 4.5运行。
答案 0 :(得分:1)
将代码更改为以下内容以使其正常工作:
static async Task Main(string[] args)
{
//any code here...
Console.WriteLine("Discovery started");
await WaitMy();
}
这是如何运作的?
Task
,用于引入await
另一个建议是,你只需要await Task.Delay(30 * 1000)
,这里不需要包裹Task.Run
答案 1 :(得分:0)
您正在使用任务编程库。这里发生的是,在WaitMy
方法中,您正在安排要执行的任务(await Task.Run(...)
)。任务正在后台线程上执行。
同时,Main方法在调用WaitMy
方法后继续执行。
Main方法紧接着结束,因此前台线程终止,并且与其进程关联的所有后台线程也终止。
如果您只想执行延迟,只需使用:
System.Threading.Thread.Sleep(30 * 1000);
在Main方法中,而不是调用WaitMy。
答案 2 :(得分:-1)
如果您只是希望程序在终止简单答案之前等待
Console.ReadKey();
如果你很好奇为什么程序终止而不等待它是因为你使用Task.Run
委托等待ThreadPool,所以等待发生在另一个线程上,你的应用程序只能在它从ThreadPool接收任何结果之前终止