我试图调用发送电子邮件的网络方法。我无法让它返回UI;我想我在这里的某个地方造成了僵局,但似乎无法解决它。
UI
var email = { "ID": "someID", "Body": "whatever" };
var json = '{tmpEmail:' + JSON.stringify(email) + '}';
$.ajax({
type: "POST",
url: "send.aspx/SendMessage",
contentType: "application/json; charset=utf-8",
data: json,
dataType: "text",
success: function (output) {
alert('Message Sent')
},
error: function (output) {
alert('error');
}
});
的WebMethod
<WebMethod> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Async Function SendMessage(tmpEmail As tmpEmail) As Threading.Tasks.Task(Of String)
Dim _EmailID As Guid
_EmailID = Await EmailFunctions.SendEmail(tmpEmail)
Return "Hey it works"
End Function
SendMessage功能
Public Shared Async Function SendEmailLead(obj as tmpEmail) As Task(Of Guid)
Dim PClient As New PostmarkDotNet.PostmarkClient(APIKey)
Dim Result As PostmarkDotNet.PostmarkResponse = await PClient.SendMessageAsync(obj)
If Result.Status = PostmarkDotNet.PostmarkStatus.Success Then
...
Return LogID
Else
... throw some exception
End If
End Function
我在几分钟后无法让它返回呼叫者,当我停止调试时,从ajax呼叫中获取错误警告。
我试过了:
有人可以解释一下,为什么如果我一直使用得到结果它最终不会回到&#34;嘿它有效&#34;。
编辑/更新
经过进一步研究后,我可以通过以下更改来实现它:
我不明白为什么会这样,这不会导致死锁吗?我明白它应该是async / await一直向下;但是,只有当它完全相反时,我才能让它工作。
附加问题:如果我已经登录该函数被调用是否有办法在其自己的线程中触发它并立即返回到UI?