我想使用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。这是我第一次使用它。
答案 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
。