继续不运行C#

时间:2014-07-02 17:36:54

标签: c# asynchronous async-await

考虑以下代码

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运行延续。我遗漏了一些非常基本的东西

2 个答案:

答案 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");
}