C#使用无限循环多次尝试从外部源获取数据
我的应用程序使用MongoDB,我需要连接到服务器,并在应用程序启动时获取一些关键数据。如果连接尝试失败,我需要询问用户是否要重试或关闭应用程序 到目前为止,我采用了以下解决方案:C#使用无限循环多次尝试从外部源获取数据,c#,loops,asynchronous,C#,Loops,Asynchronous,我的应用程序使用MongoDB,我需要连接到服务器,并在应用程序启动时获取一些关键数据。如果连接尝试失败,我需要询问用户是否要重试或关闭应用程序 到目前为止,我采用了以下解决方案: public async Task LoadCriticalData() { bool IsBusy = true; CancellationTokenSource Source = new CancellationTokenSource(); CancellationToken Token
public async Task LoadCriticalData()
{
bool IsBusy = true;
CancellationTokenSource Source = new CancellationTokenSource();
CancellationToken Token = Source.Token;
while (!Token.IsCancellationRequested)
{
try
{
await FetchCriticalData();
IsBusy = false;
Source.Cancel();
}
catch (Exception E)
{
bool Retry = RequestUserInteraction();
if (!Retry)
{
Source.Cancel();
CloseApplication();
}
}
}
}
我真的不喜欢无限循环(多年前从未使用过),但似乎没有其他方法来实现这一点
这就足够了还是可以用更好的方式来完成?只要有一些退出条件,在循环中重试操作通常是可以的。操作成功时,或操作员选择终止操作或应用程序时。无论哪种情况,它都不是真正的无限循环。无限循环在哪里?我没有看到。此流中的所有循环都依赖于基于方法成功/失败或用户输入设置的变量。除非连接不断失败,并且用户不断请求程序重试连接,否则任何操作都不会无限期运行。CancellationTokenSource似乎没有必要。为什么不使用一个简单的布尔标志呢?