Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 我们可以在QueuedTask.Run()中使用Try/Catch吗_C#_.net_Arcgis_Arcgis Runtime - Fatal编程技术网

C# 我们可以在QueuedTask.Run()中使用Try/Catch吗

C# 我们可以在QueuedTask.Run()中使用Try/Catch吗,c#,.net,arcgis,arcgis-runtime,C#,.net,Arcgis,Arcgis Runtime,我们可以在QueuedTask.Run()中使用Try/Catch吗 我觉得Try/Catch应该在QueuedTask.Run()之外,但我没有理由这样做。请澄清是加入还是退出QueuedTask.Run() 如果你没有理由在外面处理它,那么可以在里面处理。只要能够正确处理异常,就应该始终处理异常。所以我会去里面 我没有关于ArcGIS的领域知识,但是如果QueuedTask.Run可以抛出它自己的异常(不是由您的代理生成的异常),您就不会以这种方式捕获它们。然而,无论如何,你应该分开处理 您

我们可以在
QueuedTask.Run()中使用Try/Catch吗

我觉得Try/Catch应该在QueuedTask.Run()之外,但我没有理由这样做。请澄清是加入还是退出
QueuedTask.Run()


如果你没有理由在外面处理它,那么可以在里面处理。只要能够正确处理异常,就应该始终处理异常。所以我会去里面

我没有关于ArcGIS的领域知识,但是如果
QueuedTask.Run
可以抛出它自己的异常(不是由您的代理生成的异常),您就不会以这种方式捕获它们。然而,无论如何,你应该分开处理

您还需要考虑,<代码>队列任务。运行< /COD>看起来像是<代码>异步代码>代码>操作。因此,要捕获任何异常,您需要先等待它。如果你不能,你需要在里面抓住它

因此,最终的答案是:视情况而定。它也可能是一个上下文决策,如评论所述:


我看到的唯一可能的问题是从后台线程调用DialogService.ShowPrompt()


另一方面:您应该使用catch-all异常作为最后手段。看。

我觉得很好。请好好谈谈你的感受。也许你有一个不同的问题?我只是在考虑是在QueuedTask.Run()外部使用Try Catch还是在内部使用Try Catch。这对执行有什么影响?请在这里帮助理解将其保持在外部或内部的区别。我看到的唯一可能的问题是从后台线程调用DialogService.ShowPrompt()。如果它处理正确,那么你就没事了。我建议你试一下。移动
尝试捕捉
。故意抛出异常。比较这两种情况的表现。说清楚一点,我知道会发生什么。我想教你钓鱼。
public ICommand CmdEdit
{
    get
    {
        return _cmdEdit ?? (_cmdEdit = new RelayCommand(() =>
        {
            QueuedTask.Run(() =>
            {
                try
                {
                    if (_selectedObj != null && SelectedObjs.Count() == 1)
                    {
                        OnEditObj(_selectedObj);
                    }
                }
                catch (Exception ex)
                {
                    DialogService.ShowPrompt(ex, null, DialogServiceMessage.Message_EditError, DialogServiceCaption.Caption_Exception, DialogServiceButtons.Ok, DialogServiceIcon.Exclamation);
                    OneGeo.ExceptionLogger.EventLogger.Log(ex);
                }
            });
        }, () => (_selectedObj != null && _selectedObjs.Count() == 1)));
    }
}