异步等待每个问题
本文关键字:问题 等待 异步 | 更新日期: 2023-09-27 18:24:49
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(( 永远不会完成,因为它调用了一个永无止境的函数,因此它不会到达帐户中的下一个字符串。
我不知道从哪里开始解决这个问题。有什么解决办法吗?
您可以集体等待它们,而不是连续等待每个帐户。这样,即使您的一个帐户进入无限循环,其他帐户仍然可以继续加载。
Accounts = File.ReadAllLines(AccountsFile.FileName);
Task completionTask = Task.WhenAll(Accounts.Select(LoadAccount));
您通常需要将completionTask
存储在类变量中。随后,当您在LoadAccount
调用中突破无限期 while 循环时(例如,通过轮询CancellationToken
发出取消信号(,您可以使用此completionTask
等待所有任务完成。