Как я могу использовать асинхронные над 3 различными элементами массива - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу использовать Async для выполнения функции над 3 различными массивами.

В настоящее время у меня есть вложенный цикл foreach над 3 массивами, однако, похоже, что он нарушает реальное намерение Async.

Это метод, в котором я перебираю код:

    public void newclient(Form f, string[] username, string[] password, string[] server) { 

        foreach(string thisserver in server) {
            foreach (string thispassword in password) {
                foreach (string thisusername in username) {

                    Console.WriteLine(thisserver);

                    Task<string> Task = SpawnClient(f, thisusername, thispassword, thisserver);
                    Console.WriteLine(Task);
                }
            }
        }

Это метод Async, который он вызывает:

   public async Task<string> SpawnClient(Form f, string nextusername, string nextpassword, string nextserver) {

///////////////dostuffhere

    }

Я пытался поиграть с такими вещамикак TaskCompletionSource, но я думаю, что сейчас неправильно понимаю Async.Я впервые использую его.

1 Ответ

0 голосов
/ 11 февраля 2019

Возможно, вы хотите это:

List<Task<string>> tasks = new List<Task<string>>();
foreach(string thisserver in server) {
    foreach (string thispassword in password) {
        foreach (string thisusername in username) {
            Console.WriteLine(thisserver);
            Task<string> task = SpawnClient(f, thisusername, thispassword, thisserver);
            tasks.Add(task);
        }
    }
}
var allResults = await Task.WhenAll(tasks);

Вам нужно будет повторно объявить newclient как async Task или (только если newclient является обработчиком событий) async void.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...