Вызов асинхронного метода из асинхронного метода закрывает приложение - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть асинхронный метод (назовем его Initialize ()), который запускает различные другие методы, используя await.

Initialize () вызывается способом блокировки. Мой профессор сказал мне, что я должен сделать этот метод Initialize () также асинхронным, создав метод InitializeAsync (). Поэтому мой метод InitializeAsync () теперь вызывает Initialize () с использованием async и await, а мой метод Initialize () также использует async и await.

Проблема: я не знаю, почему, но моя программа начинает работать, но закрывается не в ожидании Initialize (). Есть идеи, что я делаю не так?

public Client(string ipAddress, int port, string name)
    {
        this.username = name;
        this.port = port;
        this.ipAddress = ipAddress;
        this.status = Status.WAIT;

        this.InitializeAsync();
    }

private async void InitializeAsync()
    {
        await Initialize();
    }

private async Task Initialize()
    {
        this.users = new List<User>();

        this.SetupListenSocket();

        // Starting the listener.
        Task listenerTask = new Task(ListenEndless);
        listenerTask.Start();

        this.SetupSendSocket();

        // Starting the useriput sending.
        Task sendingTask = new Task(SendEndlessUserinputs);
        sendingTask.Start();

        string heloMessage = "cf-1.0:HELO:" + this.username;

        // Sending the helo message.
        this.SendMessage(heloMessage);

        // Starting the endless ping sender.
        Task pingTask = new Task(SendPingEndless);
        pingTask.Start();

        await listenerTask;
        await sendingTask;
        await pingTask;

        Console.WriteLine("\nDone.");
        Console.ReadKey();
    }
...