如何在3个不同的数组元素上使用异步

时间:2019-02-11 11:47:58

标签: c# .net asynchronous async-await

我想使用Async在3个不同的数组上执行功能。

目前,我在3个数组上有一个嵌套的foreach循环,但是这似乎违反了异步的实际意图。

这是我遍历代码的方法:

    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 :(得分:0)

也许您想要这样:

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