考虑以下代码
class Program
{
static void Continue()
{
Console.Out.WriteLine("Continue t1");
}
static async Task AsyncStart()
{
Console.Out.WriteLine("AsyncStart");
return;
}
static void Main(string[] args)
{
Task t3 = AsyncStart().ContinueWith((ant) => { Continue(); });
Console.Out.WriteLine("BEFORE");
Task.WhenAny(new Task[] { t3 });
Console.Out.WriteLine("AFTER");
}
}输出是
AsyncStart
BEFORE
AFTER
Press any key to continue . . .继续运行!
是的,我知道AsyncStart不包含任何等待(CS1998),但是我仍然希望t3运行这个延续。我错过了一些非常基本的东西
发布于 2014-07-02 17:41:39
在继续(在后台线程上运行)有机会运行之前,您的进程就结束了。
发布于 2014-07-03 03:09:59
Task.WhenAny返回一个Task,在这种情况下,您需要在async方法中执行await (Main不能标记为async)。或者,因为您是在控制台应用程序中,所以可以调用Task.WaitAll,这应该等待延续完成。在GUI应用程序中,WaitAll可能导致死锁,但在控制台应用程序中,这是可以的。
static void Main(string[] args)
{
Task t3 = AsyncStart().ContinueWith((ant) => { Continue(); });
Console.Out.WriteLine("BEFORE");
Task.WaitAll(new Task[] { t3 });
Console.Out.WriteLine("AFTER");
}https://stackoverflow.com/questions/24537570
复制相似问题