private async void btnLoadFile_Click(object sender, EventArgs e)
{
if(AccountsFile.ShowDialog()==DialogResult.OK)
{
Accounts = File.ReadAllLines(AccountsFile.FileName);
foreach(string str in Accounts)
{
await LoadAccount(str);
}
}
}
我遇到了一个问题,我知道异步编程是如何工作的,它会等待任务完成但是LoadAccount()永远不会完成,因为它调用一个带有永不停止的while循环的函数,所以它不会到达帐户中的下一个字符串。
我不知道从哪里开始这个问题。任何解决方案?
答案 0 :(得分:1)
您可以连续等待每个帐户,而不是等待每个帐户。这样,即使您的某个帐户进入无限循环,其他帐户仍可继续加载。
Accounts = File.ReadAllLines(AccountsFile.FileName);
Task completionTask = Task.WhenAll(Accounts.Select(LoadAccount));
您通常希望将completionTask
存储在类变量中。随后,当您在LoadAccount
次来电中摆脱无限期循环时(例如,通过轮询CancellationToken
发出信号取消),您可以使用此completionTask
等待所有要完成的任务。