考虑以下代码
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运行延续。我遗漏了一些非常基本的东西
答案 0 :(得分:7)
您的流程在继续(在后台线程上运行)之前有机会运行。
答案 1 :(得分:1)
Task.WhenAny
会返回Task
您需要await
的{{1}},在这种情况下,您需要使用async
方法进行操作(主要可以&#39} ; t标记为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");
}