为啥我的word更新域后代码依然是代码,没有变成我想要的东西。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我的word更新域后代码依然是代码,没有变成我想要的东西。相关的知识,希望对你有一定的参考价值。

参考技术A 能否键入alt+f9(切换域代码显示),然后把出错的那几个域代码的内容写到这里来。你可能没法直接把域代码复制/粘贴过来,所以只能手工照着敲了。

为啥即使在指定返回 - 后台线程到主线程问题后代码也会执行?

【中文标题】为啥即使在指定返回 - 后台线程到主线程问题后代码也会执行?【英文标题】:Why does code execute even after specifying return - background thread to main thread issue?为什么即使在指定返回 - 后台线程到主线程问题后代码也会执行? 【发布时间】:2020-07-19 18:31:30 【问题描述】: 我有一个访问服务器的代码,通过一个名称列表并找到一个与我的查询匹配的名称 我通过将整个服务器请求放在后台线程上来处理错误并使用 throw 语句处理错误(基本上是函数 throws) 当我遇到错误时 - 例如“无法连接到服务器”,throw 语句将被成功调用并在 catch 块中成功捕获。

问题是每当我遇到错误时,我都需要在主线程上更新 UI。我使用 dispatchQueue.main.async 来执行此操作并使用 return 语句。但是 return 语句之后的代码仍然被执行。我做错了什么?

在下面的代码中,.queueNetworkFailed枚举错误情况的catch块被成功调用。但看起来 return 不会停止程序执行代码 在 do - catch 语句之后仍然会被执行。是不是因为主线程错误处理的背景?

    func startConnection()
        getServerTimestamp  (timestamp, error) in
            guard let timestampTemp = timestamp?.dateValue().timeIntervalSince1970 else return
            let timestamp = Int(timestampTemp)
            self.connectButtonPressedTimestamp = timestamp
            
            DispatchQueue.global(qos: .background).async 
                var partnerUid: String?
                self.buildServerQuery()
                
                do 
                    partnerUid = try self.findConnection()
                 catch let error 
                    switch error as? ConnectError
                    case .queueNetworkFail: //CALLED SUCCESSFULLY
                        DispatchQueue.main.async 
                            self.userState = 1
                            return //EXPECT FUNCTION TO STOP HERE BUT...
                        
                    case .queueEmptyAtServer:
                        DispatchQueue.main.async 
                            self.establishState4()
                            return
                        
                    case .queueEmptyAtLocal:
                        DispatchQueue.main.async 
                            self.establishState4()
                            return
                        
                    case .none:
                        DispatchQueue.main.async 
                            self.userState = 1
                            return
                        
                    
                
                
                if let partnerUid = partnerUid //FUNCTION EXECUTION CONTINUES DESPITE RETURN
                    self.finalizeConnection(partnerUid: partnerUid)
                 else 
                    DispatchQueue.main.async 
                        print("Something went wrong")
                        self.userState = 1
                    
                
            
        
    

【问题讨论】:

【参考方案1】:

您正在从 Dispatched Main Queue 中的执行流程中返回。您应该从主队列外部返回以停止当前队列中以下代码的执行。

DispatchQueue.main.async 
    self.userState = 1

return //EXPECT TO STOP HERE...

【讨论】:

感谢您的回答。将尝试并将其标记为正确答案 不客气。它应该工作。您可以通过尝试创建一个函数并从调度队列内部和调度队列外部返回来通过一个简单的示例进行检查。

以上是关于为啥我的word更新域后代码依然是代码,没有变成我想要的东西。的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在指定返回 - 后台线程到主线程问题后代码也会执行?

为啥添加范围解析参数后代码可以工作?

word文档中,更新域之后 目录中有图片 怎么去掉?? 求高手指教

为啥有的PDF格式文字复制后变乱码

stm32在MDK环境下重新建工程,文件夹以及相应文件夹的文件都相同,但是不知道为啥编译完成后代码长度变长

从 git origin 意外拉取后代码被删除