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)));
}
}