[c#] C #에서 콘솔 응용 프로그램에서 비동기?


Answers

이 작업을 수행하는 가장 간단한 방법은 다음과 같습니다.

static void Main(string[] args)
{
    Task t = MainAsync(args);
    t.Wait();
}

static async Task MainAsync(string[] args)
{
    await ...
}
Question

나는이 간단한 코드를 가지고있다 :

public static async Task<int> SumTwoOperationsAsync()
{
    var firstTask = GetOperationOneAsync();
    var secondTask = GetOperationTwoAsync();
    return await firstTask + await secondTask;
}


private async Task<int> GetOperationOneAsync()
{
    await Task.Delay(500); // Just to simulate an operation taking time
    return 10;
}

private async Task<int> GetOperationTwoAsync()
{
    await Task.Delay(100); // Just to simulate an operation taking time
    return 5;
}

큰. 이 컴파일됩니다.

하지만 내가 콘솔 앱을 가지고 있고 위 코드를 실행하고 SumTwoOperationsAsync() 호출).

 static  void Main(string[] args)
        {
             SumTwoOperationsAsync();
        }

그러나 나는 그것을 읽었습니다 ( sync 사용할 때) 나는 모든 방법으로 위아래 로 동기화해야합니다 :

질문 : 그렇다면 내 Main 기능을 async 로 표시해야합니까?

컴파일 오류가 있기 때문에 그럴 수 없습니다 .

엔트리 포인트는 'async'수정 자로 표시 될 수 없다.

내가 비동기 물건을 이해한다면, 스레드는 Main 함수를 입력하게 될 것입니다 SumTwoOperationsAsync ---->는 두 함수를 모두 호출 SumTwoOperationsAsync 입니다. 그러나 SumTwoOperationsAsync

내가 뭘 놓치고 있니?




내 해결책. JSONServer는 콘솔 창에서 HttpListener 서버를 실행하기 위해 작성한 클래스입니다.

class Program
{
    public static JSONServer srv = null;

    static void Main(string[] args)
    {
        Console.WriteLine("NLPS Core Server");

        srv = new JSONServer(100);
        srv.Start();

        InputLoopProcessor();

        while(srv.IsRunning)
        {
            Thread.Sleep(250);
        }

    }

    private static async Task InputLoopProcessor()
    {
        string line = "";

        Console.WriteLine("Core NLPS Server: Started on port 8080. " + DateTime.Now);

        while(line != "quit")
        {
            Console.Write(": ");
            line = Console.ReadLine().ToLower();
            Console.WriteLine(line);

            if(line == "?" || line == "help")
            {
                Console.WriteLine("Core NLPS Server Help");
                Console.WriteLine("    ? or help: Show this help.");
                Console.WriteLine("    quit: Stop the server.");
            }
        }
        srv.Stop();
        Console.WriteLine("Core Processor done at " + DateTime.Now);

    }
}



Links