2017-10-10 5 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace TaskStart 
{ 
    class Program 
    { 
     private static void PrintMessage() 
     { 
      Console.WriteLine("Hello Task library!"); 
     } 
     static void Main(string[] args) 
     { 
      //method 1 
      //Task.Factory.StartNew(() => { Console.WriteLine("Hello Task library!");}); 

      //method 2 
      //Task task = new Task(new Action(PrintMessage)); 
      //task.Start(); 

      //method3 
      Task task = new Task(delegate { PrintMessage(); }); 
      task.Start(); 
     } 
    } 
} 

콘솔 앱에서 Hello Task library! 메시지를 인쇄하려고합니다. 현재 아래에 method 3을 사용 중입니다. 어떤 이유로 VS2015에서 Ctrl + F5을 누르면 앱에 빈 화면이 표시되고 Press any key to continue 메시지가 표시됩니다.C에서 대리자를 사용하여 작업 시작

내 메시지가 인쇄되지 않는 이유는 무엇입니까?

답변

5

작업 완료를 위해 wait이 아니기 때문입니다. 메소드 끝 부분에 task.Wait()을 추가하면 결과가 표시되어야합니다.

업데이트 : Visual Studio 2017 업데이트 15.3 이상 및 C# 7.1을 사용하는 경우 지금 asyncMain에 대한 지원이 있습니다.

다음과 같이 코드를 수정할 수 있습니다

class Program 
{ 
    private static void PrintMessage() 
    { 
     Console.WriteLine("Hello Task library!"); 
    } 

    static async Task Main() 
    { 
     var task = new Task(PrintMessage); 
     task.Start(); 
     await task; 
    } 
}