异步调用不与URLSession
我与URLSession工作,一个叫Backendless服务工作。 Backendless与Parse非常相似。异步调用不与URLSession
Backendless有一个通讯服务,允许您发送电子邮件。我在我的应用程序中使用这个错误报告。我创建了一个名为sendErrorCodeEmail()的方法,它调用Backendless方法。下面是一个简单的例子。
func callSendHTMLEmailInDelegate()
{
let errorCodeMessage = "There is an error."
self.sendErrorCodeEmail(errorCodeMessage)
}
func sendErrorCodeEmail(_ errorCode: String)
{
// Asynchronous Version
let subject = "Error Called"
let body = "\(errorCode)"
let recipient = ["[email protected]"]
self.backendless?.messagingService.sendHTMLEmail(subject, body: body, to: recipient, response: { (response : Any?) ->() in
print("The error code email was sent successfully. \(response)")
}, error: { (fault : Fault?) ->() in
print("The server reported a fault in the sendErrorCode email: \(fault)")
})
}
这很好用。
我的问题是,当我使用sendHTMLEmail用URLSession。如果我报告由于错误的URL导致的错误,我会调用相同的sendErrorCodeEmail()方法。问题是,Backendless的sendHTMLEmail()方法不会执行。我已经验证了sendErrorCodeEmail()被调用。
因为在代码的唯一区别是使用URLSession的,我想知道是否有我缺少一个线程问题或别的东西。 sendHTMLEmail是一种异步方法。还有一个同步版本,如果我在sendErrorCodeEmail()中调用它,它会起作用。下面是使用URLSession的基本代码。
func startSession()
{
// Start the connection with the URL that was passed in the unit method in the dataHandler.
self.session = URLSession.shared
let dataTask = self.session!.dataTask(with: self.sessionURL!, completionHandler: { (data, response, error) -> Void in
if error == nil
{
if data != nil
{
print("Data was downloaded successfully")
}
}
else if error != nil
{
self.sendErrorCodeEmail("There was an error")
}
})
dataTask.resume()
}
任何帮助将不胜感激。
我认为有一个在工作线程调用send
问题。
你可以尝试做调用在主线程中调用:
DispatchQueue.main.async {
self.sendErrorCodeEmail("There was an error")
}
辉煌。谢谢。你有新的发送是在工作线程上的原因吗?这是默认操作吗?将异步调用放在除main之外的线程中? – jonthornham
你必须检查文档。它指出'dataTask'的完成处理程序将在委托队列中执行(当你创建'URLSession'时,你通常会交给它)。由于您使用单例('URLSession.shared'),因此它将使用任意的工作线程 - 虽然这在文档中没有明确说明。 –
感谢您的帮助! – jonthornham
看代码,这样只会达到'self.sendErrorCodeEmail(“有错误”)'代码时误差不无,还有另一种情况,错误不是零,但数据是零,你没有覆盖。添加额外的打印语句/断点并确保代码已到达。如果它达到了代码而不工作,那么告诉我们发生了什么,你会得到错误吗? – Scriptable
@Scriptable代码被简化以便于阅读。生产代码涵盖上述问题。虽然好点。我很欣赏这些意见。我不打算误导人。 – jonthornham
无后顾之忧,只是想充分了解的情况下,看起来像它应该工作 – Scriptable