您應該使用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
。
您是如何檢測到「它什麼都不做,因爲它只是移動到下一行代碼並且不執行任何任務」? –