-1

我们可以在内部使用 Try/CatchQueuedTask.Run()吗?

我觉得 Try/Catch 应该在外面QueuedTask.Run(),但我没有理由这样做。请说明是进还是出QueuedTask.Run()

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

1 回答 1

0

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

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

您还需要考虑,QueuedTask.Run似乎是一个async操作。因此,为了能够捕获您await之前需要的任何异常。如果你不能,你肯定需要在里面抓住它。

所以确定的答案:这取决于。正如glenebob评论的那样,这也可能是一个上下文决定:

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

附带说明:您应该仅将 catch all exceptions 用作最后的手段。看到这个

于 2018-07-18T00:42:24.843 回答