Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用无限循环多次尝试从外部源获取数据_C#_Loops_Asynchronous - Fatal编程技术网

C#使用无限循环多次尝试从外部源获取数据

C#使用无限循环多次尝试从外部源获取数据,c#,loops,asynchronous,C#,Loops,Asynchronous,我的应用程序使用MongoDB,我需要连接到服务器,并在应用程序启动时获取一些关键数据。如果连接尝试失败,我需要询问用户是否要重试或关闭应用程序 到目前为止,我采用了以下解决方案: public async Task LoadCriticalData() { bool IsBusy = true; CancellationTokenSource Source = new CancellationTokenSource(); CancellationToken Token

我的应用程序使用MongoDB,我需要连接到服务器,并在应用程序启动时获取一些关键数据。如果连接尝试失败,我需要询问用户是否要重试或关闭应用程序

到目前为止,我采用了以下解决方案:

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似乎没有必要。为什么不使用一个简单的布尔标志呢?