【发布时间】:2020-10-04 09:50:27
【问题描述】:
ina c# 项目我有一个静态异步任务,用于通过 tmpt-relay 发送电子邮件。 主要功能正在调用此任务。 这工作正常。 我的问题是我从 vb.net 项目中调用此函数,这也有效,电子邮件已发送但 vb.net 挂在 c#-call 中
我的 c# 代码
public class SmoffMail
{
public static string sRet;
public string sendMail(string mailto)
{
RunAsync(mailto).Wait();
return sRet;
}
static async Task RunAsync(string mailto){
MailjetClient client = new MailjetClient("419cce0b9807d1016642156966fc4ec1",
....
sRet = "ok.....";
}
}
从 vb.net 我这样称呼它:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim smail As New smoff.Mailjet.SmoffMail
Dim i As Integer = 0
Dim sRet As String = ""
sRet = smail.sendMail("xxxxxxxh@bluewin.ch")
MsgBox(sRet)
End Sub
End Class
所以函数 smail.sendMail() 被调用但挂起,代码中的下一行 ( msgbox ) 是神经质的尝试。
感谢您的帮助
【问题讨论】:
-
RunAsync().Wait() 是您必须在控制台模式应用程序中执行的操作。在一个 winforms 应用程序中,它是 will deadlock.
-
Re Hans 的评论,另见 Stephen Cleary 的博文:blog.stephencleary.com/2012/07/dont-block-on-async-code.html
-
所有异步的好处都扔掉了