您应该使用await
关键字等待任务完成。只需放在await
行首:
Task.Factory.StartNew(() => connectUser(username, password, server));
async
此外,您必须在函数的返回类型之前添加关键字。
更新(更多信息):
Task.Factory.StartNew
创建一个任务,启动它并将其返回给您。当你不使用时await
,你不要等待它完成。这有助于您想要启动一堆任务并让它们同时运行的情况。
private static void connectUser(string username, string password, string server)
{
while (true)
{
Console.WriteLine("Connecting... " + username);
Thread.Sleep(500);
}
}
static void Main(string[] args)
{
var server = "a.com";
var alts = new string[] { "abc:abc", "bcd:bcd" };
var tasks = new Task[alts.Length];
for (int i = 0; i < alts.Length; i++)
{
String password = alts[i].Substring(alts[i].IndexOf(":") + 1);
String username = alts[i].Substring(0, alts[i].IndexOf(":"));
Console.WriteLine("Loaded account: " + username);
tasks[i] = Task.Factory.StartNew(() => connectUser(username, password, server));
}
Task.WaitAll(tasks);
}
这是我之前建议的。您创建一个Task
s 数组并将结果Task.Factory.StartNew()
放入该数组中。然后,您使用该Task.WaitAll()
功能等待任务完成。另一种方法是使用线程。
顺便说一句,我建议你使用大写字母作为函数名,意思是:ConnectUser
而不是connectUser
.